사용자가 파일 (그림 등)을 업로드 할 수있는 웹 사이트에서 작업하고 있습니다. 필자는이 분야에 대한 사전 경험이 없으며 이러한 파일을 저장하고 색인을 생성하는 올바른 방법을 알기를 희망했습니다.웹 서버에 사용자 업로드 파일 저장
대용량 데이터에 잘 맞도록 아키텍처를 만들고 싶지만, 현재는 매우 높은 (페이스 북, 구글 스케일) 볼륨에 대해 걱정하지 않습니다.
내가
/files/{username}/
에서 파일 시스템에있는 파일을 저장하는 생각 그리고 데이터베이스 각 사용자가 자신이 업로드 한 각 파일의 파일 이름 (및 URL을)와 함께 자신의 테이블이 uploads
을 가지고 있었다 (그리고 내가 저장할 수있는 다른 추가 정보). 이 (각 사용자에게 자신의 테이블을 제공하는) 데이터베이스의 끝은 나에게는 매우 비효율적 인 것처럼 보이지만 단일 테이블에있는 모든 파일의 레코드를 유지하는 것이 옳지 않을뿐만 아니라 단일 파일마다 전체 테이블을 검색해야합니다. 액세스됩니다.
각 사용자에게 자신의 테이블을 제공하는 것에 대한 나의 추론은 사용자가 주어진 파일을 찾을 때 테이블 전체에서 데이터를 분할하고 검색 시간을 줄이는 깔끔하고 독특한 방법이었습니다.
도움이됩니다. 그러나 몇 가지 문제가 있습니다. 현재 우리는 데이터베이스 당 1GB로 제한하는 공유 웹 서버를 사용하고 있기 때문에 데이터베이스 자체에 블롭으로 그림/파일을 저장할 수 없습니다. 또한 특정 사진의 검색 시간을 늘리면 한 테이블에 모든 사진이 표시되지 않을까요? 사용자 당 테이블에 대한 나의 추론은 사용자를 안다는 이유에서 어떤 테이블을 검색해야 하는지를 알 수 있고, 따라서 더 적은 레코드를 검색해야한다는 것입니다 (사용자 ID를 기반으로하는 샤딩으로 생각하십시오). 그게 말이되지 않을까요? 내가 빠진 것이 있습니까? – xbonez
인덱스의 크기는 SQL 실행에 영향을 미치지 만 인덱싱되지 않은 많은 수의 블롭은 눈에 띄지 않습니다. 그러나 공간이 없다면 그것은 논점의 하나입니다. 이 경우 파일 시스템에 저장해야합니다. 한 폴더에 많은 수의 파일을 피하는 것이 좋은 습관 인 것처럼 사용자 ID/사진 폴더 구조는 많아도 괜찮습니다. 직접 액세스를 피하기 위해 .htaccess를 두었다가 (액세스 권한이 필요하다고 가정 할 때) 사진을 사용합니까? id = 이미지/jpeg 또는 기타로 헤더를 변경하고 readfile의 이미지를 echo합니다. –