+5

Mì ăn liền vài khái niệm cơ bản Neo4j, giữa mùa đông lạnh lẽo nhưng không cô đơn

-----Xin chào các bạn mình tên là Vinh, hiện tại đang là một lập trình viên Nodejs

Đây là một bài viết mang tính chất chia sẻ, đánh giá một phía từ mình, nên có những nhận định từ phía mình và mình mới tập viết nên nhiều khi trình bày nội dung chưa rõ ràng, còn dài dòng, có sai sót mong các bạn cũng bỏ qua. Do có thể có các bạn các anh/chị/em xem bài nên mình xin gọi chung là mọi người hoặc các bạn nhé thông cảm cho em/anh/tớ 😁.

hôm nay đẹp trời mình ghi chép nhanh lại kiến thức mà đã lâu mình bỏ xó đó là neo4j

Đây chỉ là cái ghi chú nhanh thôi nên cũng không chi tiết về cách thức hoạt động sâu ở bên dưới, chỉ đơn giản là lướt qua các nội dung thôi

Nếu mọi người đã sẵn sàng, xin mời đến với tô mì ăn liền của mình 😄

Tóm lược cơ bản

Neo4j là cơ sở dữ liệu đồ thị. Đúng như tên gọi dữ liệu sẽ được tổ chức dưới dạng đồ thị, mỗi đối tượng dữ dữ liệu sẽ được lưu thành một node(nút) trong đồ thị và thường những node này sẽ được gắn nhãn (label) để phân biệt các loại node với nhau.Mối tương quan giữa các node sẽ là các cạnh(relationships) thể hiện mối quan hệ giữa các đối tượng. Như hình minh hoạ các bạn cũng có thể thấy

  • Node: (Trong hình nó là mấy cục tròn tròn)Một nút trong csdl đồ thị có thể lưu thông tin trên một node với dạng json và được gắn label để phân biệt loại node phục vụ các thuật toán, query (các bạn có thể hiểu nôm na nó là trong SQL mình có tên bảng để phân biệt đó là customer hay product, thì Neo4j có label để biết đâu là customer hay product còn node là các dòng dữ liệu trong bảng, hiểu nôm na thế nhá mặc dùng cách lưu nó khác nhau)
  • Relationships: (Trong hình nó là mấy cái đường thẳng nối các cục tròn tròn) Là cạnh trong csdl đồ thị, thể hiện mối quan hệ giữa các node, mối quan hệ này có thể gắn thêm gía trị (dạng json) trên các cạnh này, các cạnh này rất quan trọng trong việc query, sử dụng thuật toán.

Trong đó các dữ liệu về đối tượng ( sản phẩm, người dùng,..) được thể hiện bằng một node trong đồ thị

Còn các mối quan hệ là các dấu. ---> và ------ và <----- hoặc là. <------> để thể hiện mối quan hệ (relationships) ở đây bạn có thể đánh độ nặng cho mối quan hệ (ví dụ A--[friends : 5 ]-->B, A--[friends : 15]-->C A với B là bạn những bạn thường đánh 5 điểm, A với C là bận thân đánh 15 điểm)

Là cơ sở dữ liệu dạng đồ thị thường được sử dụng trong việc mô tả các mạng thông tin như mạng xã hội, mạng cảm biến,… các dạng mà ở đó thông tin được mô tả như một thực thể (một đỉnh) trên một đồ thị có hướng)

Neo4j là gì?

Neo4j là cơ sở dữ liệu đồ thị.

Nếu như cơ sở dữ liệu quan hệ như SQLServer, MySQL, Oracle, một đối tượng như MonHoc (subject) với các đặc điểm của đối tượng (properties) được mô tả bằng một Bảng dữ liệu gồm nhiều cột với tên Bảng là tên của đối tượng, các cột trong Bảng mô tả đặc điểm của đối tượng. Mối quan hệ giữa các đối tượng được xây dựng bằng cách ghi nhận thông tin của thực thể cha vào thực thể con.

Đối với neo4j đối tượng được mô tả thành các đỉnh của đồ thị, đặc điểm của đối tượng được mô tả qua thuộc tính của đỉnh và mối quan hệ giữa các đối tượng được mô tả bằng liên kết có hướng giữa các đỉnh.

  • Neo4j là cơ sở dữ liệu dạng đồ thị nên mô hình lưu trữ, cấu trúc lưu trữ và đối tượng mang đặc điểm của cơ sở dữ liệu dạng đồ thị nói chung. Tức là Neo4j lưu trữ dữ liệu trên các nút (node), xây dựng lên các cấu trúc dữ liệu khác nhau bằng các relationships.

Bài viết này mình sẽ tập trung 3 đối tượng chính là Node, relationships, labels, sẽ có 1 số thứ không được giải thích như các thuật toán hỗ trợ, vì thêm vào giải thích nữa thì sẽ khá dài, nên những thông tin đó mình sẽ lướt nhanh

Rồi để nó hàn lâm hơn xí thì đây mình tổng hợp từ các bài viết về neo4j và chế cháu trong blog của neo4j.com mà quên link rồi mọi người thông cảm ạ

Ứng dụng

  • Neo4j cơ sở dữ liệu đồ thị là một dạng cơ sở dữ liệu thường được sử dụng trong việc mô tả các mạng thông tin như mạng xã hội, mạng cảm biến,… các dạng mà ở đó thông tin được mô tả như một thực thể (một đỉnh) trên một đồ thị có hướng.

Nguồn hình ảnh: https://neo4j.com/developer/graph-database/ Mình cũng đã có có vài ý tưởng về neo4j như:

Node

  • Nodes thường được sử dụng để biểu diễn các thực thể (entities).
  • Đồ thị đơn giản nhất là đồ thị mà trong đó chỉ có duy nhất một node.

Label

  • Labels có thể được sử dụng để mô hình hóa miền giá trị của các node, thông thường chúng ta sẽ gộp nhóm các node có cùng kiểu dữ liệu hoặc là thuộc tính thành một tập hợp rồi sau đó gắn label vào cho chúng.

Ví dụ: tất cả những nodes mà biểu diễn cho một đối tượng là users thì có thể được gắn labels là :Users. Lúc này bạn có thể thuận tiện làm việc với neo4j thông qua các nodes đã được gắn labels này, chẳng hạn như là tìm tất cả các users có tên khớp với ABC,....

  • Mỗi một node thì có thể có một hoặc nhiều lables. Muốn biểu diễn thêm những chiều khác nhau của dữ liệu, có thể thêm labels vào cho các nodes.

Relationships

  • Relationships đúng như cái tên của nó đó là sẽ biểu mối quan hệ, hay liên kết giữa các node với nhau.
  • Ngoài ra relationship còn có thể cấu trúc phân chia các nodes thành những cấu trúc khác nhau, biến đồ thị thành các dạng cấu trúc giống như là list, tree, map, hoặc có thể là thực thể phức hợp (compound entity).
  • Thực thể phức hợp là thực thể có nhiều liên kết phức tạp liên kết với nhau.
  • Các relationships sẽ giúp cho đồ thị sẽ có ý nghĩa hơn, gẫn gũi với bài toán thực tế hơn.

Properties

  • Nói cách đơn giản là node, Relationships mình có thể ghi dữ liệu lên hai thằng này ( dữ liệu kiểu json) 😀 Còn theo lý thuyết thì:
  • Properties là một cặp name-value, đƣợc dùng để biểu diễn cho các thuộc tính của các nodes cũng nhƣ là các relationships. Các property có thể lưu trữ các kiểu dữ liệu đa dạng khác nhau nhƣ là number, string và boolean với các miền giá trị tương ứng.

Ngôn ngữ truy vấn Cypher

Link: https://neo4j.com/docs/cypher-manual/current/clauses/create/ cũng khá tương tự SQL nên là cứ copy past ra là nó y chang 😃) Còn các vấn đề khi thao tác hay có phát hiện gì hay mình sẽ làm 1 bài viết mới tạm thời mình đang tổng hợp.

Ví dụ:

  • create node

      CREATE (userV: USER {username: 'VinhRikin', dev:"nodejs"})
      RETURN userV
    

userV như là một biến( giống như bạn const(var, let) userV. trong js vậy đó). USER: là label của node, trong dấu {} là properties(thông tin) của node muốn lưu gì thì lưu 😄.

  • Create relationship

Mình sẽ tạo thêm 1 node location để tạo mối liên kết giữa user và location (relationship: live).

MATCH (userV:USER), (cityHCM:LOCATION) WHERE userV.username = 'VinhRikin' AND cityHCM.name = 'HCM' CREATE (userV)-[r:LIVE {value: 4}]->(cityHCM) RETURN r Các bạn có thể gắn properties cho relationship, thường mình dùng những properties như độ nặng của mối quan hệ và áp dụng cái thuật toán neo4j để phân cụm, tìm đường.

MATCH là từ khoá dùng để tiềm kiếm ví dụ MATCH (userV:USER), returnn userV thì sẽ trả ra các node USER Các loại delete, update,... cũng tương tự và cũng dễ hiều mọi người xem thêm ở link trên nhé

Các nhóm thuật toán

  • Có 5 nhóm thuật toán neo4j hổ trợ mình tự dịch ra tiếng Việt là: Phân nhóm, node nổi bậc, tương tự, dự đoán, tìm đường. (Dịch hơi phèn mọi người thông cảm 😅)
  • Thì mõi nhóm thuật toán này sẽ có các loại thuật toán trong đó Có thích thú thì mời mọi người xem thêm ở :https://neo4j.com/docs/graph-data-science/current/algorithms/
  • Chưa hiểu hết các thuật toán nên mình không dám chém gió 😅

Install

Tổng kết

Qua bài viết thì chúng ta cũng đã biết neo4j là gì rồi nó có những. đối tượng cơ bản như thế nào, các thức query, lướt nhanh các thuật toán Cảm ơn mọi người đã xem chúc một ngày tốt lành.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí