Với các tình huống xử lý truy vấn từ (1) đến (4) và thuật toán đưa ra trong mục 3.1.3. Trong tình huống (1) chúng ta muốn lưu kết quả trả lời A của Q. Theo thuật toán Stream sẽ là rỗng, Store sẽ chứa toàn bộ A, Scratch sẽ lưu giá trị nào đó mà cần cho cập nhật kết quả trong Store. Ví dụ Q là truy vấn Select, Store có kích thước không giới hạn, trong khi Scratch là rỗng. Ngược lại trong tình huống (2), chúng ta sẽ để cho A như một luồng dữ liệu, Stream sẽ là luồng dữ liệu chứa toàn bộ kết quả trả lời tới A, trong khi Store là rỗng. Ví dụ Q là một self-join, chúng ta có thể gửi toàn bộ những bản ghi kết quả tới Stream vì sẽ duy trì kết quả trong mãi mãi, nhưng Scratch có thể cần phải có kích thước giới hạn.
Với tình huống (3) kết quả trả lời A có hiện tượng chuyển đổi hoặc xóa ngay cả khi các luồng dữ liệu vào chỉ có thêm mới. Ví dụ một truy vấn thực hiện các phép phân nhóm hoặc tổng hợp. Trong tình huống (4) khi các luồng dữ liệu vào có thể có cập nhật và xóa. Ví dụ giả thiết Q là một truy vấn Group by trên một luồng dữ liệu với một hàm tổng hợp min. Bởi vì min là đồng điệu với thêm mới. Trong tình huống (3) A được duy trì trong Store, Scratch có thể rỗng. Trong tình huống (4) không gian lưu trữ không giới hạn là cần thiết cho Scratch để bảo đảm các giá trị min luôn được tính toán trong toàn bộ dữ liệu. Trong cả hai trường hợp (3) và (4) khi một số nhóm không có thêm, chuyển đổi hoặc xóa các bản ghi trong nhóm thì bản ghi kết quả trả lời chỉ có trong Stream hoặc chuyển từ Store sang Stream.
3.1.5. Ý tƣởng của đề tài
Trong khi các ứng dụng cơ sở dữ liệu quan hệ dựa trên truy vấn đã thành điển hình, các ứng dụng hướng sự kiện cũng đã trở nên ngày càng quan trọng. Các ứng dụng hướng sự kiện được đặc trưng bởi tốc độ dữ liệu sự kiện cao,
các truy vấn liên tục và yêu cầu độ trễ vào khoảng millisecond, do vậy lưu trữ dữ liệu trong một cơ sở dữ liệu quan hệ để xử lý là không thực tế. Những yêu cầu chia sẻ bởi chiều dọc các thị trường như dịch vụ tài chính, y tế, giám sát, sản xuất, dầu khí, giao thông vận tải, các tiện ích và phân tích Web.
Hình 3.4: Kiến trúc tạo báo cáo BI sử dụng thuật toán truy vấn liên tục
Ở phần này tôi sẽ trình bày kiến trúc tạo báo cáo thời gian thực cho BI sử dụng StreamInsight để xử lý cho truy vấn liên tục trong BI được thể hiện như hình 3.4 với tình huống (2) của mục 3.1 trong đó giả thiết các luồng dữ liệu đầu vào là chỉ thêm mới, dữ liệu đầu ra chỉ quan tâm đến dữ liệu mới và toàn bộ dữ liệu của truy vấn liên tục sẽ không được lưu trữ. Thử nghiệm thuật toán cho tình huống (2) trong truy vấn liên tục này. Phần 3.2 cung cấp một cái nhìn tổng quan về StreamInsight – một nền tảng của Microsoft SQL Server để xử lý sự kiện phức tạp công suất cao, độ trễ thấp. StreamInsight cho phép các nhà phát triển phần mềm tạo ra các giải pháp CEP theo hai kịch bản là xây dựng đóng gói các ứng dụng hướng sự kiện và phát triển tùy chỉnh các ứng dụng hướng sự kiện cho các doanh nghiệp, đồng thời sẽ mô tả kiến trúc StreamInsight và các thành phần chính để làm thế nào viết các truy vấn liên tục, phân tích và xử lý các sự kiện qua hệ thống.
Bộ xử lý liên tục luồng dữ liệu
Adapter Input Adapter Output Streaming Data sources: Devices, sensors Web servers Event strores, Database Stock ticker Output BI Report Web
3.2. Microsoft StreamInsight và báo cáo trong BI
Thời gian thực của báo cáo đề cập đến một quá trình mà trong đó người dùng sẽ nhận được một báo cáo tại thời điểm các dữ liệu giao dịch xảy ra ở một nơi nào đó trong hệ thống của tổ chức. Khách quan mà nói, chúng ta thấy khả năng này không bao giờ có thể thực hiện được trong thực tế vốn chịu ảnh hưởng của rất nhiều yếu tố. Với báo cáo thời gian thực chúng ta có thể hiểu theo nghĩa giảm thời gian trễ trong báo cáo tới xấp xỉ một giây hay đến mili giây báo cáo cho một sự kiện phát sinh. Đây là một dạng báo cáo rất quan trọng trong hệ thống BI.
Microsoft StreamInsight là một nền tảng mạnh có thể sử dụng để phát triển và triển khai ứng dụng xử lý những sự kiện phức tạp (CEP). Kiến trúc chung cho một ứng dụng dựa trên StreamInsight được thể hiện trong hình 3.5.
Hình 3.5: Nền tảng ứng dụng StreamInsight
Dựa trên kiến trúc xử lý thông lượng cao trên nền tảng phát triển Microsoft .NET, bạn có thể nhanh chóng tạo ra các ứng dụng lấy dữ liệu từ
nhiều nguồn sự kiện ngay lập tức (thường lấy từ các ứng dụng sản xuất, các ứng dụng tài chính trong kinh doanh, phân tích Web và phân tích hoạt động) và xuất ra thông tin quan trọng vào những thiết bị hiển thị hoặc kho dữ liệu của hệ thống hình 3.5
StreamInsight không chỉ giúp giảm chi phí từ việc khai thác, phân tích mối tương quan giữa dữ liệu mà còn cho phép bạn giám sát, quản lý và khai thác các dữ liệu theo điều kiện, cơ hội và các rủi ro gần như ngay lập tức. Đây là công cụ hỗ trợ đắc lực cho việc tạo ra các báo cáo Dashboard.
3.2.1. Mục tiêu và lợi ích của StreamInsight với báo cáo BI
Trong mô hình phát triển của BI, khả năng đưa ra hành động tự động để hỗ trợ cho lãnh đạo đưa ra các quyết định kinh doanh kịp thời là rất quan trọng. Điều này phụ thuộc vào nhiều yếu tố như dữ liệu lịch sử, dữ liệu kinh doanh thời gian thực và kĩ năng vận dụng những dữ liệu này vào quá trình vận hành hệ thống. Với nền tảng công nghệ StreamInsight người phát triển hệ thống có thể sử dụng để phát triển các ứng dụng CEP và có thể đạt được các mục tiêu chiến lược và kế hoạch cho hệ thống BI như:
Giám sát dữ liệu từ nhiều nguồn tác động đến doanh nghiệp: Phân tích và tương quan dữ liệu trong thời gian thực, tổng hợp các sự kiện từ nhiều nguồn khác nhau và thực hiện các phân tích phức tạp theo thời gian, tìm ra xu hướng, phân tích rủi ro và phát hiện cơ hội;
Nâng cao hiệu quả quản lý doanh nghiệp: Nhờ thực hiện phân tích các sự kiện với độ trễ thấp và kích hoạt hành động tương ứng phù hợp các chỉ số hiệu suất kinh doanh chính. Báo cáo nhanh cho câu hỏi “cơ hội hay rủi ro” cho các lĩnh vực bằng cách kết hợp các định nghĩa KPI và suy luận của ứng dụng CEP, qua đó nâng cao hiệu quả hoạt động và khả năng đáp ứng một cách nhanh chóng các cơ hội kinh doanh;
Tối ƣu các sự kiện để tìm ra các tiêu chí mới trong kinh doanh: Cùng với khả năng theo dõi và phân tích nhiều luồng dữ liệu ảnh hưởng đến hoạt động doanh nghiệp, ta có thể tìm ra đâu là những tác động chính, trực tiếp ảnh hưởng tới mục tiêu chiến lược. Trên cơ sở thực tế đó đưa ra các điều chỉnh phù hợp cho doanh nghiệp;
Dự đoán mô hình kinh doanh: Bằng cách khai thác liên tục lịch sử các dữ liệu đã tinh chỉnh và cải thiện các định nghĩa chỉ số hiệu suất kinh doanh.
Các mục tiêu này giữ vai trò quan trọng trong hệ thống BI, để thực hiện thành công các mục tiêu này không phải là một việc dễ dàng. Nó không những phụ thuộc vào dữ liệu sạch, khả năng phán đoán của người dùng mà còn phụ thuộc khả năng xử lý, tổng hợp, dự báo chính xác của công cụ hỗ trợ. Khi sử dụng StreamInsight, chúng ta có những thuận lợi chính cho hệ thống BI như:
Tối ƣu hóa các hiệu suất và thông lƣợng dữ liệu: StreamInsight thực hiện một kiến trúc streaming hỗ trợ thực hiện song song các truy vấn liên tục có tốc độ cao trên các dòng dữ liệu. Việc sử dụng bộ nhớ chính lưu trữ và tính toán kết quả làm tăng hiệu suất xử lý dữ liệu, cho độ trễ thấp. Độ trễ thấp được thực hiện bởi vì các sự kiện được biến đổi mà không cần tải dữ liệu hoặc lưu trữ ngoài trong quá trình xử lý. Với StreamInsight, tất cả được kích hoạt xử lý tự động bởi các sự kiện đến, các ứng dụng không cần trả lời cho sự kiện kiểm soát vòng. Nền tảng này cung cấp các chức năng để xử lý các sự kiện out-of-order. Ngoài ra, tài liệu tham khảo tĩnh hoặc dữ liệu lịch sử vẫn có thể được sử dụng trong quá trình phân tích, báo cáo thời gian thực.
Khả năng triển khai linh hoạt: StreamInsight hỗ trợ triển khai rất linh hoạt trên ba dạng là tích hợp đầy đủ vào các ứng dụng như một DLL (nhúng); là một máy chủ độc lập với nhiều ứng dụng và chia sẻ máy chủ với người sử dụng (Trong cấu hình độc lập đó, máy chủ StreamInsight chạy trong một tiến
trình thực thi, hoặc máy chủ có thể được đóng gói như một dịch vụ của Windows); máy chủ StreamInsight có thể được lưu trữ là một phần của một cụm máy chủ.
Với các cách triển khai đó, người phát triển hệ thống có thể đưa ra những phương án tối ưu nhất cho hệ thống BI tùy thuộc vào phạm vi và quy mô doanh nghiệp. Với các doanh nghiệp/tổ chức vừa và nhỏ, quy mô khai thác dữ liệu ít có thể sử dụng cách triển khai nhúng vào một quy trình trong ứng dụng. Trong trường hợp là một tập đoàn lớn, dữ liệu đến từ nhiều nơi, nhiều hạng mục cần theo dõi tổng hợp ta triển khai như một máy chủ độc lập.
Quản lý linh hoạt: Các tính năng giám sát và quản lý được xây dựng vào máy chủ StreamInsight làm cho tổng chi phí sở hữu của các ứng dụng CEP thấp. Giao diện quản lý và công cụ cảnh báo được cung cấp trong các máy chủ StreamInsight cho phép các quản trị viên dễ dàng theo dõi, giám sát từ xa và quản lý các ứng dụng CEP. Mặt khác StreamInsight cung cấp khả năng sửa lỗi độc lập với dòng sự kiện, có thể được sử dụng để phân tích, chẩn đoán và khắc phục các sự cố truy vấn sử dụng trong các ứng dụng StreamInsight.
3.2.2. Mô tả cấu trúc dữ liệu trong StreamInsight
Tất cả các dữ liệu trong StreamInsight được tổ chức thành các chiều. Mỗi chiều mô tả một bộ thuộc tính của dữ liệu thay đổi theo thời gian. Ví dụ một máy thông báo biến động mức giá của các cổ phiếu chứng khoán trong giao dịch theo thời gian hay một máy cảm biến nhiệt độ cung cấp các giá trị nhiệt độ được báo cáo bởi các cảm biến theo thời gian.
Các số liệu cơ bản trong chiều dữ liệu được đóng gói vào các sự kiện. Một sự kiện là các đơn vị dữ liệu cơ bản được xử lý bởi các máy chủ StreamInsight. Mỗi sự kiện bao gồm các phần sau đây [9]:
Header: Tiêu đề sự kiện chứa thông tin định nghĩa loại sự kiện và một hoặc nhiều điểm thời gian để xác định khoảng thời gian cho sự kiện này. Điểm mốc thời gian được xác định dựa trên ứng dụng và nguồn cung cấp dữ liệu thay vì thời gian được cung cấp bởi các hệ thống máy chủ StreamInsight. Các điểm thời gian sử dụng các kiểu dữ liệu DateTimeOffset, trong đó có nhận biết về thời gian khu vực dựa trên chu kì đồng hồ 24 giờ.
Payload.A.NET: Cấu trúc dữ liệu, chứa dữ liệu liên quan đến sự kiện. Người dùng sẽ định nghĩa các trường được xác định trong cấu trúc dựa trên kiểu của Microsoft.NET.
Sự kiện trong chiều dữ liệu có điểm thời gian ứng dụng tương ứng với thứ tự truy vấn của nó và được đặt vào “in order”. Khi điểm thời gian này không đúng, các sự kiện sẽ thông báo “out of order”. Các máy chủ StreamInsight sẽ thực hiện đồng bộ các điểm sự kiện vào và ra của truy vấn như nhau, nếu các sự kiện đến trong cùng thứ tự (trừ khi truy vấn được quy định một cách cụ thể).
Trong một chiều dữ liệu, cấu trúc sự kiện đến điển hình là: Cấu trúc ổn định (chẳng hạn như các bản ghi từ các tập tin hoặc bảng); cấu trúc liên tục và ngẫu nhiên (chẳng hạn như dữ liệu từ một máy quét mã vạch bán lẻ); cấu trúc liên tục với các dữ liệu đột biến (chẳng hạn như các nhấp chuột Web).
Tiêu đề sự kiện: Các tiêu đề của một sự kiện xác định các loại sự kiện
cũng như các thuộc tính thời gian của sự kiện.
Loại sự kiện: Các loại sự kiện cho thấy dù sự kiện này là một sự kiện mới trong chiều hoặc nó được khai báo đầy đủ của các sự kiện hiện có trong chiều dữ liệu. StreamInsight hỗ trợ hai loại sự kiện: INSERT và CTI (chiều thời gian tăng).
Các sự kiện loại INSERT cho biết một sự kiện với dung lượng của nó trong chiều sự kiện. Ngoài ra dung lượng, tiêu đề của sự kiện INSERT xác
định thời gian bắt đầu và kết thúc cho sự kiện này. Bảng 3.1 cho thấy cách bố trí của loại sự kiện INSERT.
Bảng 3.1: Cấu trúc sự kiện Insert
Header Payload
Event kind ::= INSERT
StartTime ::= DateTimeOffset EndTime ::= DateTimeOffset
Field 1 … Field n as CLR types Các sự kiện loại CTI là sự kiện ngắt đặc biệt chỉ có trong các sự kiện đầy đủ của chiều dữ liệu. Cấu trúc sự kiện CTI cung cấp duy nhất một điểm thời gian hiện tại. Một sự kiện CTI phục vụ hai mục đích:
Đầu tiên, nó dùng để cho phép một truy vấn được chấp nhận và xử lý sự kiện mà ứng dụng điểm thời gian cho là phù hợp. Khi một sự kiện CTI phát sinh, máy chủ StreamInsight thấy không có sự kiện INSERT tiếp theo, sẽ phải xem xét lại lịch sử sự kiện điểm thời gian CTI trước. Sau khi một sự kiện CTI đã được phát sinh, phải có sự kiện INSERT. Đây là dấu hiệu đầy đủ của một dòng sự kiện cho phép máy chủ StreamInsight công bố kết quả, bảo đảm rằng các sự kiện hoạt động hiệu quả thông qua hệ thống.
Mục đích thứ hai của sự kiện CTI là để duy trì độ trễ thấp của truy vấn. Khoảng cách giữa các CTI nhỏ sẽ cho các kết quả truy vấn ở một tần số cao hơn. Cấu trúc của một sự kiện loại CTI như sau.
Header
Event kind ::= CTI
StartTime::= DateTimeOffset
Mô hình sự kiện: Mô hình sự kiện xác định hình dạng sự kiện dựa trên
những đặc điểm thời gian của nó. StreamInsight hỗ trợ ba mô hình sự kiện: khoảng thời gian, điểm và cạnh [9].
Sự kiện khoảng thời gian: Có thể được xem như là loại chung chung
khoảng thời gian đại diện cho một sự kiện có dụng lượng hợp lệ cho một thời gian nhất định. Mô hình sự kiện khoảng thời gian yêu cầu thời gian cả hai bắt đầu và kết thúc của sự kiện được cung cấp trong các Metadata sự kiện. Sự kiện khoảng thời gian chỉ có giá trị cho khoảng thời gian cụ thể.
Cấu trúc sự kiện khoảng thời gian thường mô tả trong bảng 3.2.
Bảng 3.2: Sự kiện khoảng thời gian
Metadata Payload
Event kind ::= INSERT StartTime::= DateTimeOffset EndTime::= DateTimeOffset
Field 1 … Field n as CLR types
Mô hình sự kiện điểm: Đại diện cho một sự kiện xảy ra như một điểm duy nhất trong thời gian. Các mô hình điểm sự kiện chỉ đòi hỏi thời gian bắt đầu cho sự kiện này. Các máy chủ StreamInsight nhận biết thời gian kết thúc hợp lệ bằng cách thêm một đánh dấu (đơn vị thời gian nhỏ trong các loại hình dữ liệu thời gian cơ bản) với thời gian bắt đầu để thiết lập khoảng thời gian hợp lệ cho sự kiện này. Xem xét sự kiện lần cuối là duy nhất, điểm sự kiện chỉ có hiệu lực duy nhất và ngay lập tức khi thời gian bắt đầu. Cấu trúc trong bảng 3.3 cho thấy cách bố trí của một mô hình điểm sự kiện.
Bảng 3.3: Mô hình điểm sự kiện
Metadata Payload
Event kind ::= INSERT