2009-12-23 40 views
5

Nếu bạn đang thực hiện truy vấn tối thiểu/tối đa, bạn có thích sử dụng bảng tổng hợp hay chỉ truy vấn trên một loạt các hàng trong bảng thô?Để tổng hợp hoặc không tổng hợp, đó là câu hỏi thiết kế lược đồ cơ sở dữ liệu

Đây rõ ràng là một câu hỏi rất cởi mở và không có câu trả lời đúng, vì vậy tôi chỉ đang tìm kiếm các đề xuất chung của mọi người. Giả sử rằng bảng dữ liệu thô bao gồm dấu thời gian, khóa ngoài số (nói id người dùng) và giá trị thập phân (nói số tiền mua). Hơn nữa, giả sử rằng có hàng triệu hàng trong bảng.

Tôi đã thực hiện cả hai và bị rách. Trên một bảng tổng hợp bàn tay đã cho tôi truy vấn nhanh hơn đáng kể nhưng với chi phí của sự gia tăng của các bảng bổ sung. Hiển thị các giá trị hiện tại cho một phạm vi tổng hợp hoặc yêu cầu thả hoàn toàn trở lại bảng dữ liệu thô hoặc kết hợp nhiều kết hợp hạt mịn hơn. Tôi đã thấy rằng theo dõi trong mã ứng dụng trong đó bảng tổng hợp để truy vấn khi có nhiều công việc mà bạn nghĩ và thay đổi lược đồ đó sẽ được yêu cầu, vì phạm vi kết hợp ban đầu sẽ luôn không đủ ("Nhưng tôi muốn xem doanh số bán hàng của chúng tôi trong 3 kỳ trả tiền cuối cùng! ").

Mặt khác, truy vấn từ dữ liệu thô có thể bị trừng phạt chậm nhưng cho phép tôi rất linh hoạt về phạm vi dữ liệu. Khi phạm vi giới hạn thay đổi, tôi chỉ cần thay đổi một truy vấn thay vì phải xây dựng lại các bảng tổng hợp. Tương tự, mã ứng dụng yêu cầu ít cập nhật hơn. Tôi nghi ngờ rằng nếu tôi thông minh hơn về lập chỉ mục của mình (tức là luôn có các chỉ số bao gồm tốt), tôi có thể giảm hình phạt chọn từ dữ liệu thô nhưng đó không phải là thuốc chữa bách bệnh.

Dù sao tôi cũng có thể có cả hai thế giới tốt nhất?

+0

Cơ sở dữ liệu này là gì? –

+0

Tôi thường sử dụng MySQL nhưng hy vọng các mẹo của mọi người áp dụng cho tất cả các cơ sở dữ liệu SQL. – pr1001

+0

@ pr1001: Đây là vấn đề chung ở mức độ nào đó, nhưng một số cơ sở dữ liệu cung cấp các cơ chế để làm cho vấn đề này dễ dàng hơn (ví dụ: "quan điểm vật chất" của Oracle), vì vậy thực hiện "quyền" này sẽ là cơ sở dữ liệu cụ thể ở mức độ – skaffman

Trả lời

3

Chúng tôi đã gặp vấn đề tương tự và gặp phải sự cố tương tự mà bạn gặp phải. Chúng tôi đã kết thúc việc chuyển báo cáo của mình sang Dịch vụ phân tích. Có một đường cong học tập với MDX và các dịch vụ phân tích, nhưng nó rất tuyệt. Một số lợi ích mà chúng tôi đã tìm thấy là:

  1. Bạn có rất nhiều sự linh hoạt để truy vấn bất kỳ cách nào bạn muốn. Trước khi chúng tôi phải xây dựng các tập hợp cụ thể, nhưng bây giờ một khối lập phương trả lời tất cả các câu hỏi của chúng tôi.
  2. Lưu trữ trong hình lập phương nhỏ hơn nhiều so với dữ liệu chi tiết hơn .
  3. Xây dựng và xử lý các khối mất ít thời gian hơn và sản xuất ít hơn tải trên máy chủ cơ sở dữ liệu hơn tổng hợp đã làm.

Một số Nhược điểm:

  1. Có một đường cong học tập xung quanh khối xây dựng và học hỏi MDX.
  2. Chúng tôi phải tạo một số công cụ để tự động làm việc với các hình khối.

CẬP NHẬT: Vì bạn đang sử dụng MySql, bạn có thể xem Pentaho Mondrian, một giải pháp OLAP nguồn mở hỗ trợ MySql. Tôi đã không bao giờ sử dụng nó mặc dù, vì vậy tôi không biết nếu nó sẽ làm việc cho bạn hay không. Sẽ được quan tâm trong việc biết nếu nó hoạt động cho bạn mặc dù.

+0

+ 1 đề cập đến Pentaho. Một số người tham gia vào Pentaho đến từ Cognos of BI nổi tiếng. – cethegeek

0

Tôi luôn nghiêng về dữ liệu thô. Sau khi tổng hợp, bạn không thể quay trở lại. Không có gì để làm với xóa - trừ khi có tập hợp dữ liệu tổng hợp đơn giản nhất, bạn không thể hoàn nguyên chính xác/chuyển dữ liệu trở lại thô.

Lý tưởng nhất, tôi muốn sử dụng chế độ xem vật hoá (giả sử rằng dữ liệu có thể vừa với các ràng buộc) bởi vì đó là bảng có hiệu quả. Nhưng MySQL không hỗ trợ chúng, vì vậy việc xem xét tiếp theo sẽ là một khung nhìn với các cột được tính toán, hoặc một trình kích hoạt để cập nhật một bảng thực tế.

+0

Tôi có bỏ lỡ phần mà anh ta đề xuất tổng hợp và xóa dữ liệu gốc không? Tất nhiên dữ liệu thô cần phải được lưu giữ. Nhưng ngoài các dữ liệu thô, một số dữ liệu tổng hợp là ok để lưu trữ quá. – marcc

+0

@marcc: Tôi đã nói rằng dữ liệu gốc sẽ bị xóa ở đâu? –

+0

@Ponies: Có thể khi bạn nói rằng một khi tổng hợp bạn không thể quay trở lại :) –

0

Nó giúp chọn một khóa chính tốt (tức là [user_id, used_date, used_time]). Đối với một user_id không đổi, sau đó nó rất nhanh để thực hiện một phạm vi-điều kiện trên used_date.

Nhưng khi bảng tăng lên, bạn có thể giảm kích thước bảng bằng cách tổng hợp thành một bảng như [user_id, used_date]. Đối với mọi phạm vi mà thời gian trong ngày không quan trọng thì bạn có thể sử dụng bảng đó. Một cách khác để giảm kích thước bảng là lưu trữ dữ liệu cũ mà bạn không (cho phép) truy vấn nữa.

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