Tôi có yêu cầu lưu trữ tệp do người dùng tải lên vào cơ sở dữ liệu (hệ thống tệp không phải là tùy chọn).Yêu cầu về bộ nhớ và yêu cầu lưu trữ
Các tệp được tải lên là các loại khác nhau (ví dụ: PDF, EXCEL, v.v.).
Tôi gặp sự cố khi quyết định có sử dụng MEDIUMBLOB
làm loại lưu trữ các tệp này dưới dạng dữ liệu nhị phân hay không.
Và sự nhầm lẫn phát sinh do thực tế là kích thước của các tệp này khác nhau với sự khác biệt lớn. Giống như một số tệp có vài trăm KiloByte (ví dụ: 114 KB) nhưng một số tệp khác có dung lượng tối đa 1,5 MB.
Vì vậy, tôi thực sự cần sử dụng MEDIUMBLOB
làm loại cột. Nhưng tôi có chút nhầm lẫn khi bộ nhớ thực sự chiếm phụ thuộc vào kích thước của tệp được tải lên chính nó hoặc kích thước tệp bị bỏ qua và bộ nhớ chỉ được phân bổ dựa trên kiểu dữ liệu. Điều này thực sự quan trọng vì hầu hết các tệp sẽ tải lên hàng ngày (nhiều tệp) sẽ thực sự có kích thước nhỏ và bộ nhớ (không gian) có sẵn trong đĩa bị giới hạn.
Khi tôi đọc phần sau của MySql doc:
10.5. Data Type Storage Requirements
L đại diện cho chiều dài thực tế tính bằng byte của một giá trị chuỗi cho trước.
Data type Storage Required
========================================================
TINYBLOB, TINYTEXT L + 1 bytes, where L < 2^8
BLOB, TEXT L + 2 bytes, where L < 2^16
MEDIUMBLOB, MEDIUMTEXT L + 3 bytes, where L < 2^24
LONGBLOB, LONGTEXT L + 4 bytes, where L < 2^32
Tôi nghĩ rằng bộ nhớ sử dụng phụ thuộc vào kích thước của tập tin thực tế đó là tải lên. tức là Nếu tôi có loại cột là MEDIUMBLOB
và nếu tôi tải lên tệp có kích thước 114 KB thì chỉ 114 KBytes + 3 Bytes
bộ nhớ đĩa sẽ được sử dụng chứ không phải là (2^24) Bytes + 3 Bytes
.
Tôi có đang nghĩ đúng không? Hoặc tôi sẽ lãng phí rất nhiều bộ nhớ đĩa bằng cách lưu trữ rất nhiều tệp (có kích thước từ 100 đến 300 KB) trong trường MEDIUMBLOB
.
Tôi đã thực hiện một số thử nghiệm với lệnh đó và có vẻ như giả định của tôi là đúng. Cảm ơn bạn. – jombie