Hỏi về lưu trữ ảnh?

Dạ em thấy 1 số website lớn họ lưu trữ ảnh như thế này
domain.com/a/b/abcxyz.jpg
lấy 1 hoặc 2 chữ cái đầu . Em có tìm hiểu từ 1 số trang như stack họ giải thích rằng tăng tốc scan .
Vấn đề em muốn hỏi khi lưu trữ mình lưu trữ path trong database như thế nào ?
domain.com/a/b/abc.jpg
/a/b/abc.jpg
abc.jpg

hình (hoặc file) mà lưu trữ trong db là thua rồi
cho xin link bạn đã đọc?

3 Likes

Đồng tình với bạn @kisuluoibieng. Ảnh thì làm gì có ai lưu trong db, chỗ đó chỉ để lưu trữ dữ liệu dưới dạng text thôi mà? Ảnh, video, script,… được lưu trong server, quy mô nhỏ thì lưu thẳng trực tiếp trong server chính còn quy mô lớn thì lưu trong một nhóm mạng lưới các server chuyên dụng gọi là CDN. Cách duy nhất để lưu ảnh trong db là encode cái ảnh đó thành mã base64, tuy nhiên chẳng ai dùng cách này cả. Làm vậy rất tốn thời gian, kém hiệu quả, làm UX giảm xuống, vì việc encode ảnh sang base64 đã tốn thời gian rồi trình duyệt còn phải decode ra nữa rồi mới render, mà nếu gặp phải file ảnh nặng thì xác định luôn :rofl:. Thay vì đó tại sao lại không lưu thẳng trực tiếp vào server chính hoặc vào CDN luôn đi. Vừa đỡ tốn công encode ảnh, vừa đỡ tốn công decode lại ở trình duyệt bên client.

6 Likes

media ( img, video, sound,… ) lưu riêng một nơi ( VD, drive, onedirve, storage firebase,… ) . database chỉ lưu URL dẫn tới media đó.

6 Likes

em đâu có lưu trong db . Ý em là nên lưu path ntn ấy ví dụ như :
domain.com/a/b/abc.jpg
/a/b/abc.jpg
abc.jpg

2 Likes

Hỏi thế này mà người ta không hiểu nhầm mới lạ đấy :V

3 Likes

dạ anh ơi em fix lại rồi h mình nên chọn cách nào hả ảnh

Thì lưu đường dẫn, tương đối thôi.
Còn cái bạn đọc nó thuộc về cái URL Routing rồi.

6 Likes

Dạ em đọc bài viết ở đây ạ https://serverfault.com/questions/95444/storing-a-million-images-in-the-filesystem . Hiện tại em có nguồn ảnh gần 400k ko biết lưu trữ thế nào để hợp lý .

Cách nhanh nhất là cho mấy bức ảnh đó một cái mã id rồi up lên, ví dụ như pic này: https://i.imgur.com/NM9wqsu_d.webp?maxwidth=640&shape=thumb&fidelity=medium. Ngoài ra anh thấy có một số trang phân ra theo ngày, tháng, năm, ví dụ:
https://toidicodedao.files.wordpress.com/2016/11/maxresdefault.jpg?w=1024&h=567&crop=1
https://www.upsieutoc.com/images/2020/05/24/Mens-Never-Underestimate-an-Old-man-with-a-Guitar-graphic-T-shirt.jpg

2 Likes

nếu như bạn làm project cá nhân chơi chơi thì không thể nào có cái nguồn ảnh 400k hình, và lúc này bạn không cần quan tâm vấn đề này
nếu như production thì việc bạn lưu ảnh ở server của bạn cũng rất tốn kém và không tốt bằng các dịch vụ đám mây người ta đã cung cấp sẵn
còn nếu như bạn vẫn thích challenge tự lưu 400k hình ở server của bạn thì cũng không sao cả, db lưu đường dẫn tương đối
việc chia folder cũng toàn tùy vào business và phân loại các thứ (lưu ở đâu, cấu trúc thư mục ra sao, routing ra sao…), không hẳn là /a/b là lưu file đó trong thư mục /a/b ở web root đâu

6 Likes

dạ em có mua dedicated server để lưu. 400k ảnh là ảnh crawl từ các site khác nhau ạ . Bài viết em có share bên trên /a/b/ là ví dụ , có thể lưu dưới dạng /year/month/day/time/ nữa . Trên stack họ có chia sẻ là mình chia sub folder như vậy tăng tốc độ đọc ghi hay sao ý em cũng chả rõ , 1 phần ko rành tiếng anh cho lắm .

ở trên có nói rồi, nó không chỉ đơn thuần là cấu trúc thư mục, nó có thể là routing của web server. đủ các thể loại
còn idea đơn giản là nó chính là thư mục luôn, thì có thể nó chỉ đọc nhanh thôi, ghi không nhanh đâu. thông thường static file thì người ta ưu tiên đọc, ghi chỉ 1 lần mà đọc thì rất nhiều lần
bạn nên tính toán kĩ chi phí cho việc lưu trữ này, với số lượng file hình nhiều như vậy thì việc tự làm server với thuê các dịch vụ cloud nó như thế nào

6 Likes

Dạ lưu trữ HDD giờ rất rẻ anh . Bây h dung lượng ko còn là vấn đề so với thập kỷ trước , em có test thử dùng với cloudflare , họ kiểu gì cũng cache cho mình nên tốc độ cũng cải thiện khá nhiều

Kinh nghiệm bản thân của mình nếu bạn muốn lưu đường dẫn thì tách riêng phần host với path ra. Để sau này có migrate hoặc làm cái gì thì update cho dễ
Còn tự xây dựng 1 cdn ảnh thì dễ ẹc chứ có gì đâu. Viết cái server cho up ảnh xong setup 1 cái nginx để chạy. Còn nếu muốn multi-location thì làm 1 cái sync qua lại giữa các server.
Cái khó là bài toán chi phí thôi.

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?