Chương 1: CƠ SỞ DỮ LIỆU ĐỒ THỊ Trong chương đầu tiên này, nội dung luận văn không đi sâu mà chỉ giới thiệu một cách tổng quan về đồ thị, cơ sở dữ liệu đồ thị và Neo4j. Đồng thời cũng trình bày tổng quan về mô hình dữ liệu, ngôn ngữ truy vấn Cyper và thư viện khoa học dữ liệu đồ thị của Neo4j làm cơ sở lý thuyết để tiếp tục đi sâu, phân tích và trình bày nội nội dung chính của luận văn ở các chương tiếp theo. Đồ thị là một mô hình xây dựng trên một tập hữu hạn các đối tượng và những mối quan hệ hai ngôi trên chúng. Một đồ thị G xem như một hệ thống gồm hai tập hợp (hữu hạn) mà ta ký hiệu cho gọn là G = (V, E), trong đó các phần tử của V được gọi là đỉnh và các phần tử của E được gọi là cạnh.
Mỗi cạnh e của đồ thị được xem như hình thành bởi việc liên kết hai đỉnh u và v của đồ thị, và thường viết e = (u, v). Các đỉnh u, v được gọi là các đỉnh mút của e và e được gọi là cạnh nối u với v. Để trực giác, đồ thị thường được biểu diễn trên mặt phẳng, trong đó mỗi đỉnh được vẽ như một điểm và mỗi cạnh được vẽ như một cung nối hai điểm. Trong trường hợp tổng quát nhất của mối quan hệ giữa đỉnh và cạnh, có các trường hợp sau: Giữa hai đỉnh có thể không có cạnh nối nào: Hình 1.1: Ví dụ về hai đỉnh không có cạnh nối Giữa hai đỉnh có thể có đúng một cạnh nối: Hình 1.2: Ví dụ về hai đỉnh có một cạnh nối 4 Giữa hai đỉnh có thể có nhiều hơn một cạnh nối: Hình 1.3: Ví dụ về hai đỉnh có nhiều hơn một cạnh nối Như thế, nếu mỗi đỉnh của đồ thị mô tả một đối tượng, thì mỗi cạnh biểu diễn một quan hệ hai ngôi nào đó giữa các đối tượng này.
Thông thường, vai trò của hai đỉnh mút u, v của cạnh e là như nhau, nghĩa là trong biểu diễn e = (u, v), thứ tự của u và v là không quan trọng. Trường hợp này, cạnh e mô tả một quan hệ đối xứng giữa u và v và e được gọi là cạnh vô hướng. Trong một số ứng dụng, người ta đưa thêm hướng vào các cạnh để mô tả những quan hệ không đối xứng. Khi đó cặp đỉnh (u, v) biểu diễn cạnh e cần phải kể thứ tự và e được gọi là cạnh có hướng, đỉnh u được gọi là đỉnh đầu và đỉnh v được gọi là đỉnh cuối của cạnh e.
Để diễn đạt e = (u, v) là cạnh vô hướng, người ta thường nói e là cạnh nối giữa u và v, còn để diễn đạt e = (u, v) là cạnh có hướng, người ta thường nói e là cạnh nối từ u đến v và trên cung biểu diễn nó, người ta thêm vào chiều mũi tên hướng từ u đến v.4: Ví dụ về cạnh có hướng Ngoài ra trong định nghĩa cạnh, người ta cũng cho phép trường hợp cạnh nối một đỉnh với chính nó, nghĩa là e = (u, u). Một cạnh như vậy được gọi là khuyên. Một đỉnh có khuyên mô tả một phần tử có quan hệ đang xét với chính nó.5: Ví dụ về cạnh khuyên Phân loại: Để thuận tiện cho việc nghiên cứu, người ta phân loại đồ thị theo những định nghĩa hẹp hơn với những tên dành riêng. Dưới đây là những phân loại 5 thông thường nhất.
Đồ thị vô hướng và đồ thị có hướng. Một đồ thị mà tất cả các cạnh của nó đều vô hướng được gọi là đồ thị vô hướng, trái lại đồ thị được gọi là có hướng. Trong nhiều tình huống, một đồ thị vô hướng được xử lý như một đồ thị có hướng bằng cách đồng nhất một cạnh vô hướng bằng hai cạnh có hướng ngược chiều nhau. Ngược lại, nếu bỏ đi các hướng trên các cạnh, thì đồ thị có hướng trở thành đồ thị vô hướng.
Đơn đồ thị và đa đồ thị. Một đồ thị không có khuyên và giữa hai đỉnh chỉ có nhiều nhất là một cạnh nối được gọi là một đơn đồ thị. Các đồ thị có khuyên hay có nhiều cạnh nối giữa hai đỉnh được gọi chung là các đa đồ thị. Như thế đơn đồ thị là một trường hợp riêng, nhằm nghiên cứu các mô hình mà người ta chỉ quan tâm việc giữa hai đối tượng khác nhau có hay không có mối quan hệ được xét.6: Ví dụ về đồ thị vô hướng với 6 đỉnh và 7 cạnh Biểu diễn đồ thị trên máy tính: Có nhiều cách biểu diễn cấu trúc dữ liệu của Đồ thị như Danh sách cạnh, Danh sách kề, Ma trận kề, Ma trận liên thuộc đỉnh - cạnh.
Ví dụ: Danh sách cạnh ta có thể biểu diễn dưới dạng danh sách với mỗi phần tử là 1 Tuple (nút, nút, quan hệ) 6 Hình 1.7: Cấu trúc dữ liệu theo danh sách cạnh Hay với Ma trận Kề ta phải biểu diễn 2 ma trận khác nhau, mỗi ma trận có kích thước N x N với N là số nút và giá trị tại (X, Y) thể hiện 1 mối quan hệ từ X Y Hình 1.8: Cấu trúc dữ liệu theo ma trận kề Có rất nhiều dạng đồ thị khác nhau được phân tích trong lĩnh vực lý thuyết đồ thị, dưới đây là một số dạng [[2]]: Hình 1.9: Một số dạng đồ thị 7 1. Cơ sở dữ liệu đồ thị. Hệ quản trị cơ sở dữ liệu quan hệ ra đời vào những năm 70 của thế kỉ trước, cho phép các ứng dụng lưu trữ dữ liệu thông qua ngôn ngữ truy vấn và mô hình hóa dữ liệu tiêu chuẩn (SQL). SQL nói chung hay cụ thể như RDBMS là một sản phẩm đã có bề dày sử dụng từ nhiều thập kỷ phát triển công nghệ, cho thấy khả năng ứng dụng và đáp ứng tốt trong thử nghiệm ứng suất thực tế.
Vào thời điểm đó, việc lưu trữ dữ liệu khá tốn kém, tuy nhiên các lược đồ dữ liệu cũng tương đối đơn giản, dễ hiểu nên nhu cầu về một công cụ mới là chưa cần thiết. Càng về sau, công nghệ ngày càng phát triển, nhất là từ khi web nổi lên, khối lượng dữ liệu, thông tin về người dùng, về sản phẩm, đối tượng, sự kiện mà các hệ thống cần phải xử lý giờ đây ngày 1 lớn. Ví dụ như Google, Facebook phải lưu trữ và xử lý một lượng dữ liệu cực lớn mỗi ngày. Ngay cả việc hiển thị một trang web hoặc trả lời một yêu cầu API có thể làm mất hàng chục hoặc hàng trăm yêu cầu cơ sở dữ liệu khi các ứng dụng xử lý thông tin ngày một phức tạp.
Giờ đây thì SQL lại gây một số cản trở với những hạn chế - cụ thể là lược đồ/schema cứng nhắc, thiếu linh hoạt - khiến chúng trở nên ít phù hợp hơn với các loại ứng dụng khác. Để đáp ứng những cần thiết về cơ sở dữ liệu, những cơ sở hạ tầng phục vụ và cả những chiến lược liên tục được các nhà phát triển đưa ra và cũng đã có những thay đổi đáng kể. Những công nghệ đám mây đơn giản hơn và giá cả hợp lý đã xuất hiện để thay thế những máy chủ phức tạp và đắt tiền. Hay nữa là những kĩ sư sử dụng các phương pháp đẩy nhanh tốc độ, nhằm mục đích liên tục phát triển và rút ngắn các chu trình, mục đích để truy vấn dữ liệu với tốc độ nhanh, đáp ứng nhu cầu của người dùng.
Và như vậy, NoSQL đã ra đời để phục vụ những yêu cầu phù hợp với 8 hiện tại. Hệ thống NoSQL lưu trữ và quản trị dữ liệu sao cho có thể hỗ trợ được tốc độ vận hành ở công suất cao và cung cấp tính linh hoạt tuyệt vời cho các nhà phát triển sử dụng. Không giống với cơ sở dữ liệu SQL, rất nhiều cơ sở dữ liệu NoSQL có thể mở rộng theo chiều ngang trên hàng trăm hoặc hàng ngàn máy chủ. Với NoSQL, dữ liệu có thể được lưu trữ theo kiểu không có lược đồ hoặc dạng tự do.
Dữ liệu bất kỳ có thể được lưu trữ trong bản ghi bất kỳ. Trong số các cơ sở dữ liệu NoSQL, có 4 mô hình lưu trữ dữ liệu phổ biến. Do đó, có 4 loại hệ thống NoSQL phổ biến là Document database, Key-value stores, Wide column stores và Graph database. Trong nội dung của luận văn này, tập trung nghiên cứu về cơ sở dữ liệu hướng đồ thị.
Cơ sở dữ liệu đồ thị như Neo4j nhằm mục đích cung cấp cho người dùng một cách tốt hơn để quản lý sự phức tạp của mạng dày đặc của cấu trúc dữ liệu trong tầm tay. Cơ sở dữ liệu đồ thị là cơ sở dữ liệu được thiết kế để coi các mối quan hệ giữa các dữ liệu là quan trọng như nhau đối với bản thân dữ liệu. Nó được thiết kế để lưu giữ dữ liệu mà không cần biến nó thành một mô hình được xác định trước. Thay vào đó, dữ liệu được lưu trữ giống như lần đầu tiên chúng ta vẽ ra – cho biết cách mỗi thực thể riêng lẻ kết nối với hoặc có liên quan với những thực thể khác.
Biểu đồ sau đây cho thấy một ví dụ về biểu đồ mạng xã hội. Với những người (các nút) và các mối quan hệ của họ (các cạnh), bạn có thể tìm ra ai là “bạn của những người bạn” của một người cụ thể. Ví dụ: bạn của những người bạn của Lam.10: ví dụ về CSDL đồ thị mạng xã hội 1. Các mô hình cơ sở dữ liệu đồ thị.
Mô hình đồ thị thuộc tính. Về cơ bản, nó có nghĩa là chúng ta sẽ lưu trữ dữ liệu của mình trong cơ sở dữ liệu đồ thị. Cấu trúc đồ thị có nghĩa là chúng ta sẽ sử dụng các đỉnh và cạnh (hoặc các nút và các mối quan hệ) để lưu trữ dữ liệu một cách liên tục. Do đó, cấu trúc đồ thị cho phép chúng ta [[2]]: • Biểu diễn dữ liệu theo cách tự nhiên hơn.
• Áp dụng các loại thuật toán đồ thị khác nhau trên các cấu trúc này. Tuy nhiên, mô hình đồ thị thuộc tính không phù hợp với tất cả các cấu trúc đồ thị. Cụ thể, nó được tối ưu hóa cho: • Đồ thị có hướng: Các liên kết giữa các nút (còn được gọi là các mối quan hệ) có hướng. • Đồ thị đa quan hệ: Có thể có nhiều mối quan hệ giữa hai nút giống nhau.
Những mối quan hệ này, như chúng ta sẽ thấy ở phần sau, sẽ khác biệt rõ ràng và thuộc một kiểu khác. • Lưu trữ các cặp khóa-giá trị như thuộc tính của các nút và các mối quan hệ.