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:
- node;
- relationship;
- label;
- relationship type;
- property.
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:
- label;
- relationship type;
- direction;
- property;
- path length
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:
- do‘stning do‘stlari;
- dependency zanjiri;
- network path;
- fraud accountlar;
- tavsiya.
Graph database adjacency’ni bevosita saqlagani sabab ko‘p hop traversal tabiiy bajariladi.
Path
Path node va relationshiplar ketma-ketligi.
- 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
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:
- friendship;
- ownership;
- membership;
- dependency;
- route;
- permission.
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
- shortest path;
- centrality;
- community detection;
- similarity;
- link prediction;
- connected components
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:
- node file;
- relationship file;
- stable ID;
- type;
- constraint
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