2014-09-07 17 views
5

Chúng tôi có cơ sở dữ liệu theo dõi mysql có ~ 100 triệu hàng. Chúng tôi thường chạy truy vấn nhóm theo ngày cho một số hành động nhất định, lượt truy cập duy nhất, v.v. Vấn đề là truy vấn đang chậm để tạo báo cáo hàng tháng do tương tác của các chỉ mục (chúng tôi có quét phạm vi cho ngày rồi truy vấn dựa trên nhiều các lĩnh vực khác.)có bất lợi nào trong việc xóa bảng theo dõi theo ngày không?

Để cải thiện hiệu suất, chúng tôi đã chuyển sang thực hiện công đoàn dựa trên ngày để tránh quét phạm vi và hiệu suất tốt hơn nhiều. Vì vậy, ý tưởng đã được trình bày rằng có lẽ chúng ta chỉ nên phân tích theo ngày với một bảng khác nhau cho mỗi ngày. Những lợi thế dường như là:

  • chèn nhanh - mỗi ngày bàn mới/nhỏ nên luôn luôn nhanh.
  • xóa dữ liệu cũ đơn giản (thay vì xóa 5M hàng khỏi bảng hàng 100M, chúng tôi chỉ có thể thả bảng)
  • Cách tiếp cận hiện tại của chúng tôi là thực hiện công đoàn - vì vậy chúng tôi chỉ kết hợp các bảng khác nhau thay vì các giá trị khác nhau từ một bảng.

Có ai đã nghe hoặc thử phương pháp này không? Có vấn đề gì không?

Lưu ý: Chúng tôi đang xem xét các cách tiếp cận noSQL khác - nhưng chúng tôi muốn biết đây có phải là phương pháp hợp lệ hay không nếu chúng tôi quyết định ở lại với MySQL (vì vậy, đừng đề nghị "thử XYZ noSQL DB"). Ngoài ra, tôi hiểu rằng chúng ta chỉ có thể có được một máy tốt hơn và trong phạm vi bộ dữ liệu, điều này không lớn - nhưng chúng tôi không muốn lãng phí tiền trên một máy lớn hơn nếu nhỏ hơn sẽ hoạt động mà không cần thêm nhiều công việc.

+0

Nếu có thể, bạn có thể thấy hữu ích khi lưu trữ kết quả hàng ngày trong một bảng riêng biệt, sau đó chạy truy vấn báo cáo trên đó. Ngoài ra, nếu bạn cũng làm báo cáo hàng tuần (đôi khi ngay cả khi bạn không), nó có thể là đáng giá để chạy truy vấn hàng tuần trên các giá trị tổng hợp hàng ngày và lưu trữ kết quả trong một khác, hàng tuần, bảng. Với một chút khó chịu, bạn có thể nhận được * gần như * mọi thông tin của khoảng thời gian ngay lập tức (tôi phải làm điều này một lần để hỗ trợ báo cáo qua biểu đồ động AJAX). Để lưu trữ và INSERT, phân vùng dựa theo ngày ngang sẽ là bạn của bạn. – LSerni

Trả lời

2

Dường như bạn có thể xem MySQL Partitioning.

Phân vùng cho phép bạn phân phối các phần của các bảng riêng lẻ trên một hệ thống tệp theo các quy tắc mà bạn có thể đặt phần lớn khi cần. Trong thực tế, các phần khác nhau của một bảng được lưu trữ dưới dạng các bảng riêng biệt ở các vị trí khác nhau. Quy tắc do người dùng chọn mà theo đó phân chia dữ liệu được thực hiện được gọi là chức năng phân vùng, trong MySQL có thể là mô đun, kết hợp đơn giản với một tập hợp các dải hoặc danh sách giá trị, hàm băm bên trong hoặc hàm băm tuyến tính. Hàm được chọn theo kiểu phân vùng được chỉ định bởi người dùng và lấy tham số của nó là giá trị của biểu thức do người dùng cung cấp. Biểu thức này có thể là một giá trị cột, một hàm hoạt động trên một hoặc nhiều giá trị cột hoặc một tập hợp một hoặc nhiều giá trị cột, tùy thuộc vào loại phân vùng được sử dụng.
Dường như trong trường hợp của bạn, một phân vùng băm vào phần tháng của ngày có thể hữu ích.

CREATE TABLE Mydata (id INT, amount DECIMAL(7,2), tr_date DATE) 
    ENGINE=INNODB 
    PARTITION BY HASH(MONTH(tr_date)) 
    PARTITIONS 12; 

Giải pháp phân vùng sẽ mang tính khái niệm giống như bạn, nhưng RDBMS sẽ xử lý nhiều khía cạnh cho bạn.

+0

Cảm ơn - đó là một công cụ thú vị. Tôi luôn nghĩ về việc phân vùng trên nhiều cơ sở dữ liệu. Điều này cũng sẽ làm việc thông qua một cơ sở dữ liệu? Tôi có cần phải nói chuyện với các phân vùng khác nhau hoặc cơ sở dữ liệu sẽ xử lý điều đó cho tôi không? Trong trường hợp của chúng tôi, ý nghĩ sẽ là phân vùng hoặc phân đoạn mỗi ngày, vì đó là cách chúng tôi đang sử dụng nó.Chúng tôi sẽ không có nhiều hơn một vài tháng dữ liệu - liệu giải pháp này có tốt để có ~ 90 phân vùng không? – Yehosef

+0

Khả năng của RDBMS (một cơ sở dữ liệu). Số được chỉ định trong PARTITIONS chỉ hiển thị số lượng tệp vật lý được tham gia vào quá trình partittioning. RDBMS sẽ xử lý phần còn lại. Mẫu trên có thể được thực hiện bởi PARTIONS 3 hoặc 6 và kết quả sẽ giống nhau. –

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