CHƯƠNG 1: TỔNG QUAN Chúng ta cần nghiên cứu giải pháp mới xuất phát từ các khó khăn thực tế khi phát triển các bài toán trên mô hình cơ sở dữ liệu quan hệ có sự mở rộng của khối lượng dữ liệu, sự thay đổi của các thuộc tính dữ liệu thường xuyên. Trong thực tế, khi khối lượng dữ liệu tăng dần tới các truy vấn dữ liệu bị chậm dần đi, buộc phải can thiệp bởi các giải pháp kỹ thuật, tốn kém nhiều chi phí. Tương tự, việc các thuộc tính dữ liệu bị ràng buộc quá chặt chẽ cũng khó khăn trong quá trình chỉnh sửa bổ sung các phần mềm quản lý. Đối với bài toán quản lý khách hàng, Telenor – công ty viễn thông cung cấp dịch vụ ở cả Châu Âu và Châu Á cũng đã ứng dụng CSDL đồ thị quản lý cấu trúc tổ chức khách hàng, thỏa thuận, đăng ký và quyền truy cập của người dùng.
Họ đã có những đánh giá rất tốt về hiệu suất khi ứng dụng CSDL đồ thị so với CSDL quan hệ nhưng không chia sẻ cụ thể về phạm vi ứng dụng cũng như các tài liệu thiết kế hay thử nghiệm. Tuy nhiên, đây cũng có thể coi là cơ sở về mặt thực tiễn để chúng ta nghiên cứu về hướng áp dụng CSDL đồ thị trong bài toán ERP, với phạm vi và cấu trúc phù hợp với điều kiện triển khai của doanh nghiệp 1. Bài toán Quản lý khách hàng (VNPT – Hà Nội) Bài toán Quản lý khách hàng có số lượng thực thể quan hệ không nhiều nhưng có các đặc tính phù hợp cho việc phân tích: dữ liệu lớn và tăng trưởng theo thời gian, thuộc tính dữ liệu thay đổi do các nghiệp vụ phát sinh. Xét trong tổng thể bài toán quản trị doanh nghiệp của Viễn thông Hà Nội, bài toán về Quản lý khách hàng chỉ là một phân hệ quản lý nhưng lại có vị trí rất quan trọng: - Quản lý và cung cấp thông tin khách hàng cho các phân hệ khác: chăm sóc khách hàng, tính cước, điều hành phát triển dịch vụ… - Hỗ trợ tổng hợp số liệu các báo cáo phân tích, dự đoán tình hình phát triển hoặc cơ sở quyết định cho các chính sách kinh doanh.1 Mô hình tổng thể hệ thống quản trị doanh nghiệp Bài toán quản lý mối quan hệ khách hàng là dạng bài toán quản lý thường được triển khai trên mô hình Cơ sở dữ liệu quan hệ với độ phức tạp tùy theo từng mô hình kinh doanh.
Việc bổ sung thuộc tính mới đáp ứng các yêu cầu nghiệp vụ thường dẫn tới phải chỉnh sửa lại cấu trúc các bảng dữ liệu, đồng thời tốc độ truy vấn giảm khi lượng dữ liệu tăng cao. Triển khai bài toán trên mô hình cơ sở dữ liệu đồ thị có thể là một hướng đi đúng đắn có thể khắc phục các hạn chế trên, cụ thể: - Mô hình hóa đồ thị thuộc tính rất trực quan dễ tiếp cận - CSDL đồ thị hỗ trợ bổ sung thuộc tính dữ liệu mềm dẻo. 17 - Thực hiện truy vấn dựa trên phép duyệt đồ thị và dựa vào các mối quan hệ đã định nghĩa sẵn nên tốc độ truy vấn ít biến động khi dữ liệu tăng. Cơ sở dữ liệu đồ thị NoSQL là tên gọi chung cho các CSDL mã nguồn mở nhưng không sử dụng SQL làm ngôn ngữ truy vấn, được giới thiệu lần đầu vào năm 1998.
Cơ sở dữ liệu đồ thị được phân loại thuộc về CSDL NoSQL. Khái niệm Cơ sở dữ liệu đồ thị với các đặc trưng dễ tiếp cận và trực quan là cơ sở dữ liệu được mô hình hóa trên lý thuyết đồ thị: 1.Mô hình hóa Mô hình hóa là hoạt động với mục đích đưa các vấn đề cụ thể vào một không gian có cấu trúc có thể thao tác được với các vấn đề trong không gian đó. Quá trình mô hình hóa là một loạt các bước đưa vấn đề về sự đơn giản hóa, có khả năng thao tác xử lý, đạt được các mục tiêu mong muốn. Mô hình hóa dữ liệu bằng đồ thị sử dụng các hình khối và các mũi tên để đưa dữ liệu vào và thể hiện mối quan hệ giữa chúng.Mô hình đồ thị thuộc tính Mỗi thực thể đều có những đặc điểm riêng.
Khi xây dựng mô hình đồ thị, ta có thể đưa hoàn toàn các đặc điểm đó thành các nút, nhưng như vậy sẽ rất phức tạp trong cả việc xây dựng đồ thị lẫn khai thác sử dụng đặc biệt gây lãng phí số nút khi số lượng thực thể tăng lên làm phức tạp đồ thị và tốn không gian lưu trữ. Giải pháp là ta sử dụng mô hình đồ thị thuộc tính, cụ thể: [6] 18 Hình 1.2 Ví dụ về mô hình đồ thị thuộc tính - Đồ thị là tập hợp các nút và mối quan hệ - Nút, quan hệ có các thuộc tính được thể hiện theo key-value - Mối quan hệ: được đặt tên, có nút đầu và nút cuối Đồ thị thuộc tính thường rất trực quan, dễ hiểu và nhìn có vẻ đơn giản nhưng nó có thể mô tả đa số các trường hợp sử dụng, giúp chúng nhìn nhận sâu sắc hơn về dữ liệu.Mô hình hóa dữ liệu Về cơ bản, khi thiết kế CSDL đồ thị cũng tương tự thiết kế CSDL quan hệ, mô hình đồ thị thuộc tính với sơ đồ thực thể kết hợp cũng khá tương đồng. CSDL quan hệ có các thực thể cụ thể tương ứng các nút trong CSDL đồ thị và cả hai đều cần các mối quan hệ giữa chúng. Đối với cơ sở dữ liệu đồ thị việc thiết kế như thế nào sẽ được hiện thực đúng như vậy trong khi các thực thể của CSDL quan hệ sẽ là một bảng chứa tập các bản ghi, các mối quan hệ có thể thành thực thể kết hợp.
[2][6] Phương pháp thiết kế CSDL đồ thị: [2][6][7] 19 - Xác định đâu là nút, đâu là mối quan hệ rất quan trọng, quyết định viecj xây dựng đúng đắn đồ thị. Nút thường có quan hệ với nhiều nút khác và mối quan hệ thì nó phải có nút đầu, nút cuối. - Nghiên cứu chi tiết về dữ liệu để xác định các thực thể cũng như các mối quan hệ giữa chúng. - Sử dụng nút để đại diện cho các thực thể, thuộc tính nút để mô tả các tính chất của thực thể.
- Mối quan hệ để thể hiện sự kết nối giữa các thực thể, sử dụng các thuộc tính để mô tả tính quan trọng, chất lượng của một quan hệ. - Trong trường hợp các thực thể khác nhau tương tác trong cùng một khoảng thời gian thì một sự kiện xuất hiện, chúng được thể hiện như là các nút riêng và kết nối với các thực thể tham gia. - Kiểu dữ liệu phức tạp là những kiểu dữ liệu có hơn một trường hoặc thuộc tính thường biểu diễn chúng bằng các node riêng biệt. Hệ quản trị cơ sở dữ liệu Neo4j Neo4j hiện đang là hệ quản trị cơ sở dữ liệu đồ thị phổ biến nhất, mã nguồn mở và được viết bằng ngôn ngữ Java, sử dụng Cypher làm ngôn ngữ truy vấn dữ liệu.
Neo4j hỗ trợ và thực hiện đầy đủ các yêu cầu về mặt lý thuyết cơ sở dữ liệu đồ thị. Để hiểu rõ hơn và khai thác hiệu quả hơn Neo4j, chúng ta cần tìm hiểu một số vấn đề, cụ thể: 1.Tính năng nổi bật Neo4j có một số tính năng nổi bật được giới thiệu để chúng ta cân nhắc khi áp dụng vào thực tế: - Dễ dùng và áp dụng cho các API hướng đối tượng - Tối ưu hóa cho dữ liệu có tính kết nối cao - Xác định các mối quan hệ tại thời điểm tạo giúp tối ưu thời gian truy vấn. 20 - Không yêu cầu không gian lưu trữ lớn và có bộ nhớ đệm cho các đồ thị, có khả năng mở rộng lưu trữ số lượng lớn nút (hàng tỉ) trên một hệ thống phần cứng vừa phải. - Viết trên các JVM - Java virtual machine.Nút - Nodes: Nút là đơn vị cơ bản của một đồ thị.
Trong Neo4j, các nút có thể chứa các thuộc tính, có thể có mối quan hệ với nút khác hoặc cũng có thể được dán nhãn.3 Biểu đồ mô tả Nodes - Nút Các nút thường được dùng để biểu diễn các thực thể [6].Mối quan hệ - Relationships: Quan hệ giữa các nút cho phép tìm kiếm các dữ liệu có liên quan với nhau. Mối quan hệ cũng giống như nút: có thể có thuộc tính.4 Biểu đồ mô tả Relationships - Quan hệ Một mối quan hệ kết nối hai nút với nhau, gồm nút bắt đầu và nút kết thúc có hoặc không có thuộc tính, luôn xác định hướng được dùng cho phép duyệt đồ thị. Mỗi mối quan hệ đều có loại quan hệ và mỗi loại quan hệ này được xác định bởi một định danh duy nhất [6].5 Biểu đồ mô tả Quan hệ có hướng 1.Thuộc tính - Properties: Cả nút và quan hệ đều có thể bổ sung tập các thuộc tính. Thuộc tính là cặp key – value, trong đó key có kiểu là string.
Các giá trị của thuộc tính trong Neo4j có thể là: chuỗi, số, luận lý hoặc tập hợp. Thuộc tính có key chứa giá trị null đồng nghĩa là không tồn tại key đó trong tập thuộc tính của nút hay mối quan hệ [6].6 Biểu đồ mô tả Properties – Thuộc tính 1.Nhãn - Labels: Nhãn là tên một cấu trúc đồ thị được sử dụng để nhóm các nút vào một tập hợp trong đó tất cả các nút có nhãn giống nhau cùng thuộc về một bộ.7 Biểu đồ mô tả Labels - Nhãn Một nút có thể được gắn nhãn hoặc không. Truy vấn cơ sở dữ liệu có thể tác động trên các bộ thay vì toàn đồ thị giúp cho việc viết các truy vấn tối ưu.Đường kết nối - Paths: Một đường đi là một hay nhiều node được kết nối với nhau bởi các quan hệ: [6].8 Biểu đồ mô tả Paths – Đường kết nối 1. Duyệt đồ thị - Traversal: Duyệt đồ thị là cách truy vấn đồ thị, điều hướng bắt đầu từ một nút đến các nút có liên quan.
[5][6] - Duyệt một đồ thị là đi thăm các node của đồ thị đó, dựa trên các quan hệ giữa các nút. - Có hai cách duyệt đồ thị cơ bản: duyệt theo chiều rộng và duyệt theo chiều sâu.Ngôn ngữ truy vấn Cypher là ngôn ngữ truy vấn cho cơ sở dữ liệu đồ thị, có đặc điểm dễ đọc và dễ hiểu đối với cả các nhà phát triển. Cypher được xem là ngôn ngữ truy vấn đồ thị dễ tìm hiểu nhất, cho phép người dùng truy vấn thông tin trên cơ sở dữ liệu theo một mô hình cụ thể, Nhìn chung, Cypher thể hiện rất tự nhiên và cũng như hầu hết các ngôn ngữ khác, Cypher cũng có các câu lệnh riêng, cú pháp riêng.