2012-06-12 71 views
5

Tôi phải ghi vào cơ sở dữ liệu MySQL rất nhiều dữ liệu trong khoảng 5 lần mỗi giây. Cách nhanh nhất: chèn mỗi 1/5 giây hoặc tạo hàng đợi và chèn tất cả dữ liệu được lưu trữ sau mỗi 5 giây? Nếu cách thứ hai là tốt hơn - là nó có thể chèn vào 1 bảng bằng cách sử dụng 1 yêu cầu một vài hàng?Chèn vào cơ sở dữ liệu

Trả lời

2

Xét tần số của chèn của nó tốt hơn để đi với phương pháp thứ hai xếp hàng và hơn là thêm một lần.!

Nhưng Bạn nên cân nhắc các kịch bản đầu tiên:

  1. là hệ thống của bạn thời gian thực.? Sau đó, độ trễ tối đa mà bạn có thể đủ khả năng (Vì nó sẽ mất ~ 5 giây để chèn tiếp theo và dữ liệu được duy trì/có sẵn)?

  2. Cơ hội của các giá trị/lỗi không chính xác có trong dữ liệu, như thể một dữ liệu không chính xác, bạn sẽ mất tất cả nếu truy vấn bị lỗi.

+0

Vâng, hệ thống là thời gian thực. Dữ liệu là một base64 đơn giản với ~ 100 byte dữ liệu. – Ockonal

+2

Nếu vậy tôi sẽ đi với chèn đơn, và với kết nối Pooling tại lớp DAO. Bởi vì bạn không thể đủ khả năng để mất dữ liệu trong RTS cũng như thời gian cũng rất quan trọng.! Hy vọng điều này đã giúp bạn. :) –

+0

Cảm ơn sự giúp đỡ;) – Ockonal

2

Sử dụng nhiều vùng đệm với innodb_buffer_pool_instances. nó có thể phụ thuộc vào số lõi trên máy. Sử dụng Partitioning bảng.
Bạn có thể chèn dữ liệu chung bằng cách sử dụng XML.

1

Bạn có thể thực hiện một chèn với tất cả các dữ liệu witho một cái gì đó như thế này:

INSERT INTO table (field1, field2,... , fieldN) 
VALUES 
(value1_1', value1_2,... , value1_N), 
(value2_1', value2_2,... , value2_N), 
... 
(valueM_1', valueM_2,... , valueM_N); 
2

Khi mỗi giao dịch đi kèm với một chi phí cố định, tôi muốn nói rằng làm một nhiều dòng chèn mỗi vài giây là tốt hơn . Với một số hệ thống chúng tôi sử dụng tại nơi làm việc, chúng tôi lưu trữ hàng trăm dòng trước khi chèn tất cả chúng vào một lần.

Từ MySQL documentation bạn có thể làm một dòng đa chèn như sau:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9); 
1

Kinh nghiệm của tôi là khi chèn dữ liệu vào một cơ sở dữ liệu MySQL nó là nhanh hơn để làm việc với lô.

Vì vậy, các tùy chọn chậm đang thực hiện nhiều truy vấn chèn:

 

    INSERT INTO my_table VALUES (1, "a"); 
    INSERT INTO my_table VALUES (2, "b"); 

Các tùy chọn nhanh sẽ là:

 

    INSERT INTO my_table VALUES (1, "a"), (2, "b"); 

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