Friday, March 18, 2016

Cơ Sở Dữ Liệu Đồ Thị Neo4J




Là loại cơ sở dữ liệu được tổ chức thông qua các nút và các cạnh, trong đó các nút chứa nội dung của thực thể và các cạnh thể hiện mối liên hệ với các nút khác. Có nhiều cơ sở dữ liệu đồ thị có sẵn, chẳng hạn như Neo4J, Infinite Graph, OrientDB...
Neo4J là một cơ sở dữ liệu đồ thị NoSQL (Open Source) được hiện thực bằng Java. Được phát triển từ năm 2003 và được public từ năm 2007. Ngày nay đã có hàng ngàn công ty và tổ chức sử dụng trên các lĩnh vực như quản lý mạng, phân tích phần mềm, nghiên cứu khoa học,  routing,  mạng xã hội ...
Một số tính năng trong Neo4J như:
-         Được viết bên trong JVM giảm thời gian biên dịch.
-         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.
-         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.
-         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.
-         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.

1. Tổ chức dữ liệu trong Neo4J

-         Node: là một trong những đơn vị cơ bản trong Neo4J, chứa nội dung, thuộc tính của một đối tượng .
-         Label: một node có thể có 1 hoặc nhiều label, dùng để dịnh danh một node và là một thành phần không thể thiếu trong truy vấn dữ liệu.
-         Relationship: có thể hiểu như là những cạnh nối giữa các node, cho biết mối liên hệ của các node đó là gì.
Từ những cách tổ chức dữ liệu này chúng ta có thể thấy rằng Neo4J rất phù hợp trong những CSDL có nhiều mối liên hệ, routing... ví dụ như CSDL trong mạng xã hội.

2. Cypher Query

Cypher  là một ngôn ngữ khai báo truy vấn trong CSDL đồ thị Neo4J, Cypher có thể dễ dàng truy vấn với những câu query phức tạp, bên cạnh đó chúng ta cũng có thể truy vấn Cypher ngay trên domain của server.
Cấu trúc cơ bản của 1 câu Cypher là MATCH, WHERE và RETURN


Không giống như những ngôn ngữ truy vấn thông thường, Cypher còn cung cấp thêm một số lệnh truy vấn riêng để phục vụ trong việc truy vấn trên đồ thị như routing trên các node.  

3. Cài Đặt Neo4J

Cài đặt JDK: chúng ta có thể tải phiên bản JDK mới nhất từ trang chủ của Oracle (http://www.oracle.com/technetwork/java/javase/downloads/index.html)
Cài đặt Neo4J: có hai phiên bản để chúng ta có thể lựa chọn đó là bản Community dành cho nghiên cứu, học tập những project nhỏ (không cần license) bản Enterprise là bản full option dành cho những project lớn và yêu cầu nhiều tác vụ xử lý nhanh (cần license). (http://neo4j.com/download/)

4. Chạy Ứng Dụng

Chúng ta có thề chạy ứng dụng thông qua console sử dụng command line nếu bản sử dụng là Enterprise.

Nếu bản sử dụng là Community chúng ta chỉ cần chạy “Neo4j community.exe” đã được cài đặt.
Từ browser vào link localhost:7474 trong đó 7474 là port mặc định.


5. Tạo cơ sở dữ liệu sử dụng command line trên windows

Chúng ta có thể tạo dữ liệu sử dụng Cypher ngay trên domain name của server nhưng với cách làm này chỉ phù hợp với việc truy vấn dữ liệu có số lượng nhỏ. Khi mà chúng ta muốn insert dữ liệu lên tới hàng triệu dòng thì chúng ta nên sử dụng batch importer là một tool import do đội ngũ của Neo4J phát triển.
Ở đây dữ liệu cần tạo chúng ta sẽ lưu trong những tập tin có định dạng là .csv.
Person.csv là nơi chứa 50000 persons với định dạng như sau:


Person_Relationship.csv với 1.000.000 quan hệ.(mặc định 1 người có 20 bạn)
Kết quả sau khi insert 2 tập tin csv sử dụng command line như sau:
> import.bat graph.db person.csv person_relationship.csv
Chúng ta chỉ mất 9s cho việc tạo hơn 1 triệu dòng dữ liệu. Nhỏ hơn rất nhiều so với việc em sử dụng gọi function trong MySQL.

6. Restful API trong Neo4J

Trong Neo4J chúng ta cũng có thể truy vấn trực tiếp bằng cách gọi những Restful API mà Neo4J cung cấp. Chúng ta có thể lấy được những thông tin các node, relationship, tạo mới các node, update các node...
Ví dụ:
-         Liệt kê các properties của node có id = 29





No comments:

Post a Comment