Graph Database
Note: This post is over 11 years old. The information may be outdated.
Bài trước tôi có nói về Columnar Database và Graph Database. Mục đích là so sánh và đi sâu vào Graph Database. Tiếp đến là xử lý Graph Database với Big Data.
Graph (đồ thị)
Đồ thị là 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. (Wikipedia).
Graph Database
Graph Database mô tả và lưu trữ dữ liệu dưới dạng đồ thị, một cách trực quan và dễ dàng truy vấn. Dĩ nhiên Graph Database cũng sẽ có những ưu, khuyết điểm, những trường hợp nên và không nên sử dụng.
Khi nào sử dụng Graph Database
Quay lại CSDL quan hệ, chúng ta đã quá quen với cách biểu diễn theo từng quan hệ truyền thống, nhưng với những bài toán cần nhiều quan hệ việc sử dụng Relation Database để lưu trữ không phải là một giải pháp hay vì :
- Việc biểu diễn quan hệ dưới dạng bảng không phải là một cách làm trực quan.
- Các phép kết bảng thường tốn rất nhiều chi phí, nhất là với lượng dữ liệu phức tạp, lớn hoặc cực lớn.
Graph Database liên kết trực tiếp giữa các thực thể (các đỉnh). Do đó Graph 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ả hơn so với Relation Database, đồng thời khả năng trực quan hoá dữ liệu của Graph so với Relation Database cũng tốt hơn rất nhiều.
Giả sử ta có một cơ sở dữ liệu quan hệ lưu trữ thông tin người dùng và các bạn bè của họ. Rất phức tạp và tốn nhiều chi phí nếu muốn trả lời các câu hỏi sau:
- Ai là bạn của bạn Alice.
- Ai là bạn chung của Alice và Bob.
- Giả sử Alice không quen Bob, vậy họ phải thông qua những ai để có thể làm quen với nhau một cách nhanh nhất.
Tuy nhiên Graph Database trả lời câu hỏi trên một cách rất trực tiếp và đơn giản!
Neo4j
Neo4j là một trong những Graph Database phổ biển nhất hiện nay.
Quy ước:
-
Đỉnh trong Neo4j
-
được ký hiệu là (A)
-
có thể có nhiều thuộc tính dưới dạng key:value
-
có thể có một hoặc nhiều nhãn (B: Person) : B có nhãn là Person
-
Cạnh trong Neo4j
-
được ký hiệu là -[rel]-
-
có thể có nhiều thuộc tính dưới dạng key:value
-
có duy nhất một kiểu của cạnh : (a)-[rel:KNOW]-(b) mô tả a và b được liên kết với nhau bởi cạnh rel có kiểu là KNOW
-
có thể có hướng : (a)-[rel:KNOW]->(b)
Cài đặt Neo4j
Download Neo4j bản mới nhất tại trang chủ: https://neo4j.com
Khởi chạy Neo4j bằng lệnh bin/neo4j start
Truy cập: http://localhost:7474 để sử dụng và truy vấn.
Neo4j trong môi trường Big Data
Lưu trữ graph bằng Neo4j thì toàn bộ graph phải nằm trên một máy duy nhất. Đây là nhược điểm rất lớn của Neo4j, điều này khiến việc lưu trữ một big graph bao gồm rất nhiều đỉnh và cạnh bằng Neo4j là rất khó khăn.
Tuy nhiên vào năm 2010 Google có publish một bài báo về Pregel một mô hình hiệu quả cho việc xử lý big graph. Sau đó hai năm, apache đưa ra thư viện mã nguồn mở mới cài đặt mô hình Pregel là Apache Giraph trên hệ sinh thái Hadoop.
Đây chính là giải pháp cho việc lưu trữ và xử lý cho các bài toán liên quan đến big graph.
Giraph tôi sẽ trình bày trong những bài sau.
Related Posts
Bigdata - Columnar Database và Graph Database
Như đã nói về big data, chúng ta có các loại dữ liệu khác nhau và chúng ta cần lưu trữ trong database. Bigdata có thể xử lý và lưu trữ trên nhiều loại CSDL khác nhau. Sau đây tôi sẽ nói 1 ít về columnar Database và Graph Database.
Manage Redshift/Postgres Privileges GitOps Style
The grant project aims to manage Postgres and Redshift database roles and privileges in GitOps style. Grant is the culmination of my learning of Rust for data engineering tools.
Good reasons to use ClickHouse
More than 200+ companies are using ClickHouse today. With many features support, it's equally powerful for both Analytics and Big Data service backend.
Postgres Full Text Search
Postgres has built-in functions to handle Full Text Search queries. This is like a "search engine" within Postgres.