Thứ Ba, 1 tháng 3, 2022

Giới thiệu Graph Database và Neo4j

Hôm nay mình muôn chia sẻ 1 chút về Graph Database: khái niệm về nó, một số ví dụ và giới thiệu về Neo4j - một Graph Database khá nổi tiếng. 

Mọi người thường nghe họăc thường làm việc với khá nhiều loại cơ sở dữ liệu khác nhau,  phổ biến nhất có lẽ là dạng cơ sử dữ liệu quan hệ (RDBMS) như là SQL Server,  MySQL, Oracle, hay cơ sở dữ liệu phi quan hệ (NoSQL) như Redis (Dạng Key-Value), MongoDB (Dạng Document-Oriented), Casandra (Dạng Column-based), ... 

Tuy nhiên trong NoSQL, còn có một dạng nữa mà mình thấy nó tương đối khác biệt mà mình đang muốn đề cập đến, chính là Cơ sở dữ liệu kiểu đồ thị (Graph Based).

Như tên gọi thì graph databse là một kiểu cơ sở dữ liệu đồ thị, một tập các đối tượng gọi là đỉnh nối với nhau bởi các cạnh. Thông thường, đồ thị được vẽ dưới dạng một tập các điểm (đỉnh, nút) nối với nhau bởi các đoạn thẳng (cạnh). Tùy theo ứng dụng mà một số cạnh có thể có hướng.

Ưu điểm của graph database: 

  • Trực quan
  • Giảm chi phí ở các phép join so với quan hệ dạng bảng thông thường
  • Trong Graph Database quan hệ là những liên kết trực tiếp giữa các thực thể (các đỉnh). Do đó graph database giúp trả lời rất nhiều câu hỏi liên quan đến truy vấn dữ liệu một cách hiệu quả.

Trong graph database có 3 khái niệm cơ bản quan trọng nhất :

  • Node: chính là các thực thế hay các đối tượng, graph ko quan tâm đến kiểu dữ liệu của các thực thể.
  • Properties: là các thuộc tính, được đặt tên sao cho nó liên quan nhất đến các node. Ví dụ: nếu ta đặt 1 node là xe máy thì ta sẽ liên tưởng đến các thuộc tính phân khối...
  • Edges: là các cạnh nối các node, có thể coi chúng là quan hệ giữa các đối tượng và tạo lên các cấu trúc dữ liệu. Một điều quan trọng mà ta cần hiểu được là xác định được node đến và node đi để xác định đúng mối quan hệ giữa chúng

Với những nơi có dữ liệu liên kết nhiều: ví dụ của mạng xã hội, các ứng dụng gợi ý nghe nhạc, xem phim, các phầm mềm quản lý xí nghiệp nhà máy thì Graph Database sẽ là 1 lựa chọn tốt nhất.

Một vài ví dụ về graph database

Hãy cùng thử tưởng tượng 1 kịch bản sau: John là bạn Bob, Bob là bạn Mark và mối quan hệ đó biểu diễn thông qua graph database như sau

Rõ ràng cách biểu diễn trên rất đơn giản dễ nhìn dễ hiểu so với cách biểu diễn bằng các CSDL thông thường. Ví dụ Mysql:

Mỗi 1 hàng trong bảng user sẽ biểu diễn 1 người, và phải liệt kê quan hệ bạn bè qua bảng friends , và nếu ta muốn biểu diễn 1 thuộc tính khác của user thì ta phải tạo bảng mới để mô tả thuộc tính đó rồi liên kết với bảng user. Rất phức tạp.

Và để thực hiện các yêu cầu trên, một cách tổng quát thì ta chỉ cần biểu diễn với graph database như sau

Graph ko biểu diễn cấu trúc của dữ liệu. Mỗi node sẽ là 1 đối tượng (ở đây là user), và mỗi 1 node lại có các thuộc tính ( ở đây là name) và mỗi đường nối các node biểu hiện mối quan hệ giữa chúng.

Giới thiệu về Neo4j

Neo4j là 1 trong các CSDL graph nguồn mở phổ biến nhất. Neo4j hỗ trợ ngôn ngữ truy vấn Cypher, một ngôn ngữ rất trực quan trong việc truy vấn dữ liệu dưới dạng Graph.

Tính năng nỏi bật của Neo4j

  • 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
  • Cụ thể hóa các mối quan hệ tại thời điểm tạo, kết quả là không có cho truy vấn thời gian phức tạp.
  • Bỏ qua các hằng số thời gian cho các quan hệ kể cả về chiều sâu và chiều rộng do cách biều diễn các nút và quan hệ có khả năng.
  • Tất cả quan hệ trong Neo4j đều quan trọng và nhanh chóng, khiến nó có thể trở thành thực thể và dử dụng các mối quan hệ mới sau này trên "shortcut" và tăng tốc độ dữ liệu tên miền khi có nhu cầu phát sinh.
  • Lưu trữ nhỏ gọn và bộ nhớ đệm cho các đồ thị, vì vậy có thể khả năng mở rộng lưu trữ hàng tỉ nút trong một cơ sở dữ liệu 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).

Một ví dụ biểu diễn mối quan hệ thông qua Graph-Neo4j


Xem thêm về Neo4j tại https://neo4j.com/

Không có nhận xét nào:

Đăng nhận xét