2009-04-10 38 views
27

Tôi biết một chút về nội dung cơ sở dữ liệu. Tôi đã thực sự triển khai một cơ sở dữ liệu quan hệ đơn giản và nhỏ, trước đây, sử dụng các cấu trúc ISAM trên đĩa và các chỉ mục BTree và tất cả những thứ đó. Đó là niềm vui, và rất giáo dục. Tôi biết rằng tôi hiểu rõ hơn về việc thiết kế cẩn thận các lược đồ cơ sở dữ liệu và các truy vấn viết ngay bây giờ mà tôi biết thêm một chút về cách RDBMS hoạt động như thế nào dưới mui xe.Bất cứ ai biết gì về OLAP Internals?

Nhưng tôi không biết gì về các mô hình dữ liệu OLAP đa chiều và tôi đã gặp khó khăn khi tìm bất kỳ thông tin hữu ích nào trên internet.

Thông tin được lưu trữ trên đĩa như thế nào? Cấu trúc dữ liệu nào bao gồm khối lập phương? Nếu một mô hình MOLAP không sử dụng các bảng, với các cột và các bản ghi, thì ... cái gì? Đặc biệt trong dữ liệu có chiều cao, những loại cấu trúc dữ liệu nào làm cho mô hình MOLAP trở nên hiệu quả? Các triển khai MOLAP có sử dụng một cái gì đó tương tự với các chỉ mục RDBMS không?

Tại sao máy chủ OLAP tốt hơn nhiều trong việc xử lý các truy vấn đặc biệt? Các loại kết hợp tương tự có thể mất giờ để xử lý trong cơ sở dữ liệu quan hệ thông thường có thể được xử lý theo mili giây trong khối OLTP. Cơ chế cơ bản của mô hình làm cho điều đó có thể là gì?

Trả lời

18

Tôi đã triển khai một vài hệ thống bắt chước các khối OLAP làm gì và đây là một vài điều chúng tôi đã làm để chúng hoạt động.

1) Dữ liệu cốt lõi được giữ trong một mảng n chiều, tất cả trong bộ nhớ và tất cả các khóa được triển khai thông qua phân cấp của con trỏ tới mảng cơ bản. Bằng cách này, chúng tôi có thể có nhiều bộ khóa khác nhau cho cùng một dữ liệu. Các dữ liệu trong mảng là tương đương với bảng thực tế, thường nó sẽ chỉ có một vài mẩu dữ liệu, trong một ví dụ này là giá và số được bán.

2) mảng bên dưới thường thưa thớt, vì vậy khi nó được tạo, chúng tôi đã sử dụng để xóa tất cả các ô trống để lưu bộ nhớ - rất nhiều số học con trỏ lõi cứng nhưng nó hoạt động.

3) Vì chúng ta đã có các thừa kế khóa, chúng tôi có thể viết các thủ tục khá dễ dàng để xem chi tiết/phân cấp một cách dễ dàng. Ví dụ, chúng tôi sẽ truy cập vào năm dữ liệu, bằng cách đi qua các khóa tháng, lần lượt ánh xạ tới ngày và/hoặc tuần. Ở mỗi cấp độ, chúng tôi sẽ tổng hợp dữ liệu như là một phần của việc xây dựng các phép tính khối lập phương nhanh hơn nhiều.

4) Chúng tôi không thực hiện bất kỳ loại ngôn ngữ truy vấn nào, nhưng chúng tôi đã hỗ trợ tìm kiếm trên tất cả trục (tối đa 7 trong hình khối lớn nhất của chúng tôi) và được gắn trực tiếp với giao diện người dùng mà người dùng thích.

5) Chúng tôi đã triển khai nội dung chính trong C++, nhưng những ngày này tôi nghĩ C# có thể đủ nhanh, nhưng tôi lo lắng về cách triển khai mảng thưa thớt.

Hy vọng điều đó sẽ giúp ích cho bạn.

5

Cuốn sách Microsoft SQL Server 2008 Analysis Services Unleashed giải thích một số đặc điểm của SSAS 2008 một cách chi tiết. Nó không hoàn toàn là một "đây là chính xác như thế nào SSAS hoạt động dưới mui xe", nhưng nó khá gợi cảm, đặc biệt là về phía cấu trúc dữ liệu. (Nó không hoàn toàn chi tiết/cụ thể về các thuật toán chính xác.) Một vài trong số những thứ tôi, như một người nghiệp dư trong lĩnh vực này, đã thu thập từ cuốn sách này. Đây là tất cả về SSAS MOLAP:

  • Mặc dù tất cả các cuộc nói chuyện về hình khối đa chiều, bảng thực tế (hay còn gọi là đo nhóm) dữ liệu vẫn còn, để một xấp xỉ đầu tiên, cuối cùng được lưu trữ trong các bảng cơ bản 2D, một hàng cho mỗi thực tế . Một số hoạt động OLAP dường như cuối cùng bao gồm lặp qua các hàng trong bảng 2D.
  • Dữ liệu có khả năng nhỏ hơn nhiều bên trong MOLAP so với bên trong một bảng SQL tương ứng, tuy nhiên. Một mẹo là mỗi chuỗi duy nhất được lưu trữ chỉ một lần, trong một "chuỗi cửa hàng". Các cấu trúc dữ liệu sau đó có thể tham chiếu đến các chuỗi trong một dạng nhỏ gọn hơn (theo ID chuỗi, về cơ bản). SSAS cũng nén các hàng trong kho lưu trữ MOLAP dưới một dạng nào đó. Điều này thu hẹp tôi giả sử cho phép nhiều dữ liệu ở lại trong RAM cùng một lúc, đó là tốt.
  • Tương tự, SSAS thường có thể lặp qua một tập hợp con dữ liệu thay vì tập dữ liệu đầy đủ. Một vài cơ chế đang hoạt động:
    • Theo mặc định, SSAS xây dựng chỉ mục băm cho từng giá trị thứ nguyên/thuộc tính; do đó, nó biết "ngay lập tức" các trang trên đĩa chứa các dữ liệu có liên quan, ví dụ: Year = 1997.
    • Có cấu trúc bộ nhớ đệm trong đó các tập hợp con dữ liệu có liên quan được lưu trữ trong RAM tách biệt với toàn bộ tập dữ liệu. Ví dụ, bạn có thể đã lưu trữ một subcube chỉ có một vài trường của bạn, và chỉ liên quan đến dữ liệu từ năm 1997. Nếu truy vấn chỉ hỏi khoảng năm 1997, thì nó sẽ lặp lại chỉ trên subcube đó, do đó tăng tốc mọi thứ . (Nhưng lưu ý rằng một "subcube" là, đến xấp xỉ đầu tiên, chỉ là một bảng 2D.)
    • Nếu bạn là các tập hợp được xác định trước, thì các tập hợp con nhỏ hơn này cũng có thể được xử lý trước tại thời gian xử lý khối, thay vì chỉ được tính/lưu trữ theo yêu cầu.
  • Các hàng trong bảng thực tế SSAS có kích thước cố định, có thể giúp ích ở một số dạng. (Trong SQL, ngược lại, bạn có thể có các cột chuỗi có độ rộng biến đổi.)
  • Kiến trúc bộ nhớ đệm cũng có nghĩa là, khi một tập hợp đã được tính toán, nó không cần phải được nạp lại từ đĩa và được lặp lại nhiều lần.

Đây là một số yếu tố trong trò chơi SSAS. Tôi không thể tuyên bố rằng không có những thứ quan trọng khác nữa.

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