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 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

Xin chào các bạn 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.

Nguồn: viblo.asia

Bài viết liên quan

WebP là gì? Hướng dẫn cách để chuyển hình ảnh jpg, png qua webp

WebP là gì? WebP là một định dạng ảnh hiện đại, được phát triển bởi Google

Điểm khác biệt giữa IPv4 và IPv6 là gì?

IPv4 và IPv6 là hai phiên bản của hệ thống địa chỉ Giao thức Internet (IP). IP l

Check nameservers của tên miền xem website trỏ đúng chưa

Tìm hiểu cách check nameservers của tên miền để xác định tên miền đó đang dùn

Mình đang dùng Google Domains để check tên miền hàng ngày

Từ khi thông báo dịch vụ Google Domains bỏ mác Beta, mình mới để ý và bắt đầ