Bosh sahifa Wiki Neo4j

Neo4j

Neo4j — ma’lumotlarni node va ular orasidagi relationshiplar ko‘rinishida saqlaydigan graph database. U bog‘lanishlar bo‘ylab traversal, pattern matching va path tahlili uchun mo‘ljallangan.

Neo4j property graph modelidan foydalanadi. Node va relationshiplar label, type va propertylarga ega bo‘lishi mumkin.

Node

Node entity yoki obyektni ifodalaydi.

Misollar:

  • Person;
  • Company;
  • Product;
  • Server;
  • Account;
  • Article.

Node property saqlaydi:

name = Farrukh
country = UZ

Label

Label node kategoriyasini bildiradi.

Bitta node bir nechta labelga ega bo‘lishi mumkin.

Masalan:

:Person
:Developer

Label query, index va constraint uchun ishlatiladi.

Relationship

Relationship ikki node’ni bog‘laydi.

U yo‘nalish va type’ga ega.

Misol:

(Person)-[:WORKS_AT]->(Company)

Relationship ham property saqlashi mumkin:

since = 2020
role = Engineer

Property graph

Property graph elementlari:

Bu model relationshipni foreign key va join table’dan ko‘ra bevosita obyekt sifatida ifodalaydi.

Cypher

Neo4j query tili patternlarni ASCII-artga o‘xshash syntax bilan yozadi.

Misol:

MATCH (p:Person)-[:WORKS_AT]->(c:Company)
RETURN p, c

Pattern query graphdagi mos node va relationshiplarni topadi.

MATCH

MATCH graph patternini izlaydi.

Shartlar:

bilan belgilanadi.

OPTIONAL MATCH mos pattern bo‘lmasa ham oldingi rowni saqlab, null qaytaradi.

CREATE

Yangi node yoki relationship yaratadi.

CREATE (p:Person {name: "Farrukh"})

Parallel create’da duplicate entity paydo bo‘lmasligi uchun unique constraint yoki MERGEga o‘xshash pattern ishlatiladi.

MERGE

Pattern mavjud bo‘lsa topadi, bo‘lmasa yaratadi.

Bu oddiy upsertga yaqin.

Lekin butun pattern va constraint semantikasi tushunilishi kerak.

Unique constraint bo‘lmasa parallel transaction duplicate yaratishi mumkin.

Traversal

Traversal node’dan relationshiplar bo‘ylab yuradi.

Masalan:

Graph database adjacency’ni bevosita saqlagani sabab ko‘p hop traversal tabiiy bajariladi.

Path

Path node va relationshiplar ketma-ketligi.

Query:

  • eng qisqa yo‘l;
  • barcha yo‘llar;
  • maksimal chuqurlik;
  • relationship type;
  • cycle

bo‘yicha ishlashi mumkin.

Cheklanmagan path katta graphda juda ko‘p kombinatsiya yaratadi.

Variable-length relationship

Bir yoki bir nechta hop patterni yoziladi.

Masalan:

[:KNOWS*1..3]

birinchi, ikkinchi va uchinchi darajadagi aloqalarni topadi.

Result duplicate path va node’larni o‘z ichiga olishi mumkin.

Index

Node label va property bo‘yicha index yaratiladi.

Masalan, user email orqali boshlang‘ich node tez topiladi.

Keyin relationship traversal bajariladi.

Index har hop uchun emas, traversalning kirish nuqtasini topish uchun ayniqsa muhim.

Constraint

Constraint:

qoidalarini saqlashi mumkin.

Aniq turlari database edition va versiyasiga bog‘liq.

Graph modelda ham data integrity muhim.

Transaction

Node va relationship o‘zgarishlari transactionda bajariladi.

Masalan, account yaratish va unga owner relationship qo‘shish atomic bo‘lishi mumkin.

Parallel update lock va deadlock yaratishi ehtimoli bor.

Transaction qisqa saqlanadi.

Modeling

Graph model querylardan kelib chiqadi.

Relationship sifatida saqlashga mos tushunchalar:

Har narsani node qilish yoki har fieldni relationshipga aylantirish modelni ortiqcha murakkablashtiradi.

Supernode

Juda ko‘p relationshipga ega node supernode.

Masalan, bitta global category million productga bog‘langan.

Traversal va update bunday node’da qimmat bo‘lishi mumkin.

Relationship type, direction, intermediate node yoki partition modeli bilan ta’sir kamaytiriladi.

Graph algorithm

Graph data ustida:

kabi algoritmlar bajarilishi mumkin.

Katta analytics graph projection va alohida memory talab qilishi mumkin.

Fraud tahlili

Account, device, IP, payment va user node’lari orasidagi relationshiplar fraud patternlarini ko‘rsatadi.

Masalan, ko‘p account bitta device yoki payment instrumentga bog‘langan.

Pattern query suspicious subgraphni topadi.

Recommendation

User-product interaction graphi orqali:

  • o‘xshash user;
  • birga ko‘rilgan product;
  • category;
  • social connection

asosida tavsiya yaratilishi mumkin.

Graph natijasi boshqa ranking modeli bilan birlashtiriladi.

Import

Katta graphni row-by-row create qilish sekin bo‘lishi mumkin.

Bulk import:

bilan bajariladi.

Avval node, keyin relationshiplar yuklanadi.

Query plan

Cypher optimizer boshlang‘ich node topish, relationship expand, filter, join va aggregation tartibini tanlaydi.

EXPLAIN va profiling actual row sonini ko‘rsatadi.

Label-property indexsiz query barcha node’larni scan qilishi mumkin.

Relationship direction

Relationship fizik yoki mantiqiy yo‘nalishga ega bo‘lsa ham query kerak bo‘lsa ikki tomonda yurishi mumkin.

Direction business ma’noni aniq ifodalaydi:

Person -[:MEMBER_OF]-> Group

Bir xil relationshipni ikki yo‘nalishda duplicate saqlash consistency muammosi yaratishi mumkin.

Import identity

Bulk importda node’lar vaqtinchalik external ID orqali relationship fayllari bilan bog‘lanadi.

Import tugagach business unique property uchun constraint yaratiladi.

Noto‘g‘ri yoki duplicate ID relationship yo‘qolishiga olib keladi.

Backup

Graph backup node, relationship, schema va transaction logni consistent holatda saqlashi kerak.

Restore’dan keyin constraint, index va query natijalari tekshiriladi.

Bog‘liq tushunchalar

Graph database, Property graph, Node, Relationship, Label, Cypher, Traversal, Path, Graph algorithm, Pattern matching, Constraint