2009-05-11 17 views
5

Tôi phải xem xét các giải pháp để cung cấp cơ sở dữ liệu MySQL có thể xử lý khối lượng dữ liệu trong phạm vi terabyte và có sẵn cao (năm nines). Mỗi hàng cơ sở dữ liệu có khả năng có dấu thời gian và tối đa 30 giá trị float. Khối lượng công việc dự kiến ​​lên tới 2500 lần chèn/giây. Các truy vấn có thể ít thường xuyên hơn nhưng có thể lớn (có thể liên quan đến 100Gb dữ liệu) mặc dù có lẽ chỉ liên quan đến các bảng đơn.MySQL Cluster có thể xử lý một cơ sở dữ liệu terabyte

Tôi đã xem cụm MySQL được cung cấp đó là cung cấp HA của họ. Do khối lượng dữ liệu tôi cần phải sử dụng bộ nhớ dựa trên đĩa. Thực tế, tôi nghĩ rằng chỉ có các dấu thời gian có thể được giữ trong bộ nhớ và tất cả các dữ liệu khác sẽ cần phải được lưu trữ trên đĩa.

Có ai có kinh nghiệm sử dụng MySQL Cluster trên cơ sở dữ liệu có quy mô này không? Nó có khả thi không? Dung lượng lưu trữ trên đĩa ảnh hưởng như thế nào đến hiệu suất?

Tôi cũng mở cho các đề xuất khác về cách đạt được tính khả dụng mong muốn cho khối lượng dữ liệu này. Ví dụ, sẽ tốt hơn nếu sử dụng một thư viện của bên thứ ba như Sequoia để xử lý việc phân cụm các cá thể MySQL chuẩn? Hoặc một giải pháp chuyển tiếp thẳng dựa trên nhân rộng MySQL?

Điều kiện duy nhất là nó phải là giải pháp dựa trên MySQL. Tôi không nghĩ rằng MySQL là cách tốt nhất để đi cho các dữ liệu chúng tôi đang đối phó với nhưng nó là một yêu cầu khó khăn.

+2

Nếu bạn đang mua sắm công nghệ, bạn có thể xem xét một số dự án dựa trên BigTable của Google. HBase từ Hadoop và Hypertable là những dự án thú vị để xem xét. http://hadoop.apache.org/hbase/ và http://www.hypertable.org/ – Kekoa

+0

Câu hỏi đó có thể được yêu cầu tốt hơn trên serverfault.com. – lothar

Trả lời

2

Tốc độ khôn ngoan, nó có thể được xử lý. Kích thước khôn ngoan, câu hỏi không phải là kích thước của dữ liệu của bạn, mà đúng hơn là kích thước của chỉ mục của bạn khi các chỉ mục phải khớp hoàn toàn trong bộ nhớ.

Tôi rất sẵn lòng cung cấp câu trả lời tốt hơn, nhưng công việc cơ sở dữ liệu cao cấp phụ thuộc rất nhiều vào công việc. Tôi cần phải biết nhiều hơn về những gì đang xảy ra với dữ liệu để được trợ giúp thêm.

+0

Cơ sở dữ liệu sẽ lưu trữ một luồng dữ liệu được đánh dấu thời gian mà chúng tôi nhận được ở 50Hz cho một số vị trí do đó 2500 lần chèn/giây. Cấu hình của luồng có thể thay đổi bất cứ lúc nào do đó có thể có một số giá trị float thay đổi. Dấu thời gian sẽ là khóa chính và có chỉ mục. Chúng tôi giả sử rằng cột dấu thời gian sẽ nằm trong bộ nhớ với phần còn lại của dữ liệu trên đĩa. – Mark

+0

Tôi muốn chèn hàng loạt, sau đó. Một chèn/khách/giây cho nhiều hàng. Bản sao chủ nhân đơn giản sẽ cho phép bạn chuyển đổi dự phòng và dễ dàng đáp ứng tải 50 giây/giây. Câu hỏi thực sự duy nhất là làm thế nào quan trọng nó là tránh bao giờ mất một mẫu, và tôi đoán bạn có thể đối phó với 2 hoặc 3 giây dữ liệu bị mất cho một vụ tai nạn máy chủ. Như một gợi ý bổ sung, việc phân vùng bảng của bạn có thể hữu ích nếu bạn có một chỉ mục khác với khóa chính. Cũng có thể có các thủ thuật lưu trữ dữ liệu để tăng tốc các truy vấn lớn đó. –

+0

Cảm ơn các ý kiến. Chúng tôi đã nghĩ rằng hàng loạt chèn sẽ là con đường để đi. Tôi đã thực hiện một số phép tính bằng cách sử dụng kịch bản lệnh ndb_size.pl và bạn đã đúng về kích thước của chỉ mục. Bộ nhớ yêu cầu không sử dụng Cluster khả thi. Tuy nhiên, chúng tôi cũng đã học được ngày hôm nay rằng một số mất dữ liệu là OK như vậy, như bạn đã nói, chúng tôi đang xem xét sử dụng nhân rộng đơn giản. – Mark

2

Được rồi, tôi đã làm đọc phần về mySQL là một yêu cầu khó khăn. Vì vậy, với điều đó đã nói, hãy để tôi chỉ ra rằng khối lượng công việc bạn đang nói về - 2500 chèn/giây, truy vấn hiếm, truy vấn có khả năng có kết quả lên tới 10% toàn bộ tập dữ liệu - chỉ là về bi quan cho bất kỳ hệ thống cơ sở dữ liệu quan hệ nào.

(Điều này thay vì nhắc tôi về một dự án, từ lâu, nơi tôi có yêu cầu tải 100 megabyte dữ liệu chương trình qua đường dây 9600 baud RS-422 (cũng là yêu cầu khó) trong chưa đầy 300 giây (cũng một yêu cầu khó khăn.) Thực tế là 1kbyte/sec × 300 giây = 300kbyte dường như không giao tiếp.)

Sau đó, có phần về "chứa tối đa 30 nổi". Phrasing ít nhất cho thấy rằng số lượng mẫu cho mỗi chèn là biến, cho thấy lần lượt một số vấn đề bình thường - hoặc người nào khác cần phải làm cho mỗi hàng 30 mục rộng và sử dụng NULLs.

Nhưng với tất cả những gì đã nói, được rồi, bạn đang nói về 300Kbytes/giây và 2500 TPS (giả sử đây thực sự là một chuỗi các mẫu không liên quan). Điều này ít nhất là set of benchmarks, cho thấy nó không nằm ngoài phạm vi khả năng.

+0

Cảm ơn các ý kiến ​​và đã dạy tôi một từ mới! (pessimal) Để xử lý số lượng biến mẫu chúng tôi đang nghĩ đến việc tạo một bảng mới mỗi khi thay đổi này vì nó không nên quá thường xuyên. Sau đó chúng tôi sẽ có một bảng tra cứu cho phép bạn tìm bảng dữ liệu thích hợp trong một khoảng thời gian. – Mark

2

This article thực sự hữu ích trong việc xác định những gì có thể làm chậm cơ sở dữ liệu MySQL lớn.

2

Có thể thử phân mảnh ngủ đông và chạy MySQL trên 10 nút với 1/2 terabyte mỗi để bạn có thể xử lý 5 terabyte sau đó;) vượt quá giới hạn của bạn tôi nghĩ?

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