2009-06-03 37 views
5

Làm cách nào để chèn các BLOB lớn vào cơ sở dữ liệu MySQL (InnoDB)?Xử lý các Blobs khổng lồ trong MySQL?

Các trường loại loại dữ liệu hỗ trợ LONGBLOB có kích cỡ tối đa 4 GB theo sách hướng dẫn MySQL. Nhưng làm thế nào dữ liệu của một kích thước khổng lồ như vậy có được vào cơ sở dữ liệu?

Tôi cố gắng để sử dụng

INSERT INTO table (bindata) VALUES (LOAD_FILE('c:/tmp/hugefile')); 

mà thất bại nếu kích thước của hugefile lớn hơn khoảng 500 MB. Tôi đã đặt max_allowed_packet thành kích thước phù hợp; giá trị của innodb_buffer_pool_size dường như không có ảnh hưởng.

Máy chủ của tôi chạy Windows Server 2003 và có RAM 2 GB. Tôi đang sử dụng MySQL 5.0.74-enterprise-nt.

+0

Chỉ vì bạn không thể có nghĩa là bạn nên làm như vậy. – Kekoa

+3

@kekoav Tôi biết rằng trong một số môi trường, tốt hơn là lưu trữ tệp trong hệ thống tệp hơn DB, nhưng độc lập với thảo luận này, tôi phải biết cách hoạt động để lưu trữ dữ liệu như thế này để có thể thử và tạo ý kiến về lợi thế và bất lợi của cả hai giải pháp (lưu trữ trong hệ thống tập tin và lưu trữ trong DB). Cảm ơn sự thông cảm của bạn trước! –

Trả lời

2

BLOBs được lưu trữ trong bộ nhớ, đó là lý do tại sao bạn sẽ có bản sao của một BLOB như bạn đang chèn nó vào một cơ sở dữ liệu.

BLOB 500 MB của bạn chiếm 1.500 MB trong RAM, dường như đạt đến giới hạn bộ nhớ của bạn.

+0

Vì vậy, tôi cần một máy 64Bit w /> 12GB RAM để có thể chèn 4 GB BLOB? –

+0

@oli_arborum: Có vẻ như vậy. Xem tại đây: http://www.mysql.com/news-and-events/newsletter/2003-09/a0000000237.html – Quassnoi

1

Tôi không biết khách hàng/api nào bạn sử dụng, nhưng khi cố gắng sử dụng các đốm màu từ các máy khách Java và khách C mục tiêu, có vẻ như MySQL không thực sự hỗ trợ phát trực tuyến các đốm màu. Bạn cần đủ bộ nhớ để giữ toàn bộ blob như mảng byte trong ram (máy chủ và phía máy khách) nhiều hơn một lần! Di chuyển đến một linux 64 bit giúp, nhưng không phải là giải pháp mong muốn.

MySQL ist không được thực hiện để xử lý BLOB (ok đối với các BOB nhỏ :-). Nó chiếm gấp hai hoặc ba lần ram được lưu trữ/đọc trong "BLOB".

Bạn phải sử dụng cơ sở dữ liệu khác như PostgreSQL để nhận hỗ trợ BLOB thực sự, xin lỗi.

+0

Để không cần RAM sizeof (BLOB) trên máy khách, tôi đã sử dụng dòng lệnh mysql máy khách và hàm LOAD_FILE(), chỉ sử dụng RAM của máy chủ. –

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