2012-01-19 52 views
9

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.

Trả lời

2

MySQL sẽ cung cấp cho bạn kích thước của mỗi bảng sử dụng SHOW TABLE STATUS. Vì vậy, nếu bạn tải lên một vài tệp thử nghiệm, bạn sẽ có thể ước tính kích thước thực tế chúng sẽ mất trong cơ sở dữ liệu. Mỗi bảng có một số chi phí trên nên tôi sẽ sử dụng càng nhiều tệp càng hợp lý để thử nghiệm.

+0

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

Các vấn đề liên quan