Tôi đang làm việc trên trang web cho phép người dùng tải lên tệp (hình ảnh và các cách khác). Tôi không có bất kỳ kinh nghiệm nào trước đây trong lĩnh vực này và hy vọng sẽ nhận được một số đầu vào đúng cách để lưu trữ và lập chỉ mục các tệp này.Lưu trữ các tệp do người dùng tải lên trên máy chủ web
Mặc dù tôi muốn có một kiến trúc có quy mô tốt với dữ liệu khối lượng lớn, hiện tại tôi không lo lắng về khối lượng rất cao (facebook-, google-scale).
Tôi đã nghĩ đến việc lưu trữ các tập tin trên hệ thống tập tin tại
/files/{username}/
Và sau đó có một cơ sở dữ liệu uploads
nơi mỗi người dùng có bảng riêng của mình với tên tập tin (và do đó URL) của mỗi tập tin ông đã được tải lên (và bất kỳ thông tin bổ sung nào khác mà tôi có thể muốn lưu trữ). Kết thúc cơ sở dữ liệu này (cho mỗi người dùng bảng của riêng mình) có vẻ rất không hiệu quả đối với tôi, nhưng vẫn duy trì hồ sơ của tất cả các tệp trong một bảng không có vẻ đúng và nó sẽ yêu cầu tìm kiếm toàn bộ bảng mỗi lần một tệp được truy cập.
Lý do của tôi đằng sau việc cân nhắc việc đưa từng người dùng vào bảng của riêng mình là cách gọn gàng và khác biệt để phân đoạn dữ liệu trên các bảng và giảm thời gian tìm kiếm khi tìm kiếm tệp.
Nó sẽ giúp ích. Tuy nhiên, có một vài vấn đề. Hiện tại, chúng tôi đang sử dụng máy chủ web chia sẻ giới hạn ở mức 1 GB cho mỗi cơ sở dữ liệu, do đó việc lưu trữ ảnh/tệp dưới dạng blob trong cơ sở dữ liệu sẽ không khả thi. Ngoài ra, sẽ không có tất cả các hình ảnh trong một bảng tăng thời gian tìm kiếm cho một bức tranh cụ thể? Lý do của tôi đằng sau một bảng cho mỗi người dùng là, biết người dùng, tôi sẽ biết bảng để tìm kiếm và do đó phải tìm kiếm thông qua các bản ghi ít hơn (nghĩ về nó như sharding dựa trên userid). Điều đó không có ý nghĩa? Có cái gì tôi đang mất tích? – xbonez
Kích thước của chỉ mục ảnh hưởng đến việc thực hiện SQL, nhưng một tập hợp lớn các đốm màu không được lập chỉ mục sẽ không đáng chú ý. Nhưng đó là một điểm tranh luận nếu bạn không có không gian. Trong trường hợp đó, bạn sẽ cần phải lưu trữ chúng trong hệ thống tập tin. Một cấu trúc thư mục userid/photos là okay nếu bạn có một LOT của chúng, như tránh một filecount lớn trong một thư mục duy nhất là một thực hành tốt. Tôi sẽ đặt một .htaccess tại chỗ để tránh truy cập trực tiếp (giả sử bạn cần auth để truy cập chúng), và sử dụng một hình ảnh? Id = bất cứ điều gì mà thay đổi các tiêu đề để hình ảnh/jpeg hoặc bất cứ điều gì, và echo readfile của hình ảnh. –