本文转载自:https://blog.csdn.net/u013710265/article/details/72802802
(1)图的概念
G=(V,E):V为顶点的集合,E为边的集合。
有向图:边有方向
无向图:边没有方向;可以用有向图表达无向图:每条无向边->2条有向边。
(2)图数据存储系统
存储图顶点和边,提供顶点和边的查询。
(1)概念
Native graph database:采用自定义的结构在本地硬盘存储图,而不是存在数据库关系型表中。
开源Java实现。
(2)Neo4j存储
顶点:称为node
边:称为relationship
顶点和边上可以存储多个key-value值,称为property。
(3)Neo4j使用
Cypher:Declarative query language
Traversal:Embedded Java lib
(4)Cypher用法
Node:
![](https://i-blog.csdnimg.cn/blog_migrate/8d298406850369135458bef5b4d9729c.jpeg)
Relationship:
![](https://i-blog.csdnimg.cn/blog_migrate/0b67c8183dec2c940851bf8dbc6eca22.jpeg)
Create:
![](https://i-blog.csdnimg.cn/blog_migrate/dad5165249e3864e991e1aa90aaba13d.jpeg)
Match:
![](https://i-blog.csdnimg.cn/blog_migrate/749b0060def6a2c7d9cd2db00fd52fde.jpeg)
(5)文件存储
+Node.Relationship.Property 都放在一起存储,有unique id
+relationship 同一个node的relationship是双向链表,指针为relationship id,node 存储第一个的id,每个relationship可能有多个 property。
+Property 是单项链表,链表第一个存在与对应的node/relationship中
+Neo4j对node.relathionship.property缓冲,property以key-value形式附加在node/relationship上
ACID:
定义了transaction概念,采用类似snapshot isolation机制,一个transaction首先保存起来,直到transaction.finish()尝试真正修 改。采用多副本,主副本把transaction log发送到从副本,从副本replay log执行同样操作。
三、RDF和Sparql
Resource Description Framework:w3c标准,广泛用于语义网络。每个RDF记录是三元组(subject, predicate, object)。
Sparql 是RDF的查询语言 ?前缀代表变量,注意“.”