neo4j记录

neo4j记录


图数据库存储三元组

三元组一般有两种:

  • 实体-关系-实体
    image.png-29.5kB
  • 实体-属性-属性值

比特犬和可蒙犬都有一个属性“种”是家犬 但是家犬暂时数据中并不是实体
QQ图片20180204203653.jpg-43.6kB

可以把任何属性当作一个新节点来存(如上图):
优点是:存储速度快
缺点是:节点数目多,查询会慢,而且边的标签有限制65532

可以把三元组的宾语当作节点的属性存(如下图):
image.png-56.2kB
优点是:节点少 逻辑清楚
缺点是:插入节点是要判断是否该节点已保存过,建立数据库慢

下载安装

最新的Desktop版本
创建Project:Demo
创建数据库local
image.png-33.3kB
点击start启动
在manage项里可以查看状态并可视化查看数据库状态
image.png-95.1kB

常用语句
创建:
CREATE (TheMatrix:Movie {title:’The Matrix’, released:1999, tagline:’Welcome to the Real World’})
CREATE (Keanu:Person {name:’Keanu Reeves’, born:1964})
CREATE (Carrie:Person {name:’Carrie-Anne Moss’, born:1967})
查找:
MATCH (n) RETURN n
MATCH (tom {name: “Tom Hanks”}) RETURN tom
MATCH (cloudAtlas {title: “Cloud Atlas”}) RETURN cloudAtlas
MATCH (people:Person) RETURN people.name LIMIT 10
MATCH (tom:Person {name: “Tom Hanks”})-[:ACTED_IN]->(tomHanksMovies) RETURN tom,tomHanksMovies
删除:
MATCH (n) DETACH DELETE n

jCypher

目录

  • 初始化连接
  • 创建节点,属性,边
  • 添加属性
  • 查找

初始化连接

1
2
3
4
5
6
7
8
9
private static IDBAccess dbAccess;
private static void initDBConnection() {
Properties props = new Properties();
props.setProperty(DBProperties.SERVER_ROOT_URI, "bolt://localhost:7687"); // bolt连接参数
props.setProperty(DBProperties.DATABASE_DIR, "C:/NEO4J_DBS/01"); // 本地建立参数
dbAccess = DBAccessFactory.createDBAccess(DBType.IN_MEMORY, props); // 内存
dbAccess = DBAccessFactory.createDBAccess(DBType.REMOTE, props); // 远程bolt连接用
dbAccess = DBAccessFactory.createDBAccess(DBType.EMBEDDED, props); // embedded
}

创建节点,属性,边

1
2
3
4
5
6
7
8
9
10
11
12
13
String queryTitle = "CREATE MOVIE DATABASE";
JcQuery query = new JcQuery();
query.setClauses(new IClause[] {
CREATE.node(matrix1).label("Movie")
.property("title").value("The Matrix")
.property("year").value("1999-03-31"),
CREATE.node(keanu).label("Actor")
.property("name").value("Keanu Reeves")
.property("like").value(8.5)
.property("numbers").values(1, 2, 3),
CREATE.node(keanu).relation().out().type("ACTS_IN").property("role").value("Neo").node(matrix1),
});
JcQueryResult result = dbAccess.execute(query);

添加属性

1
2
3
4
5
6
7
String queryTitle = "ADD PROPERTY";
query.setClauses(new IClause[] {
MATCH.node(n),
WHERE.valueOf(n.property("name")).EQUALS(objectname),
DO.SET(n.property(propertyname)).to(subjectname),
});
JcQueryResult result = dbAccess.execute(query);

查找

1
2
3
4
5
6
query.setClauses(new IClause[] {
MATCH.node(n),
WHERE.valueOf(n.property("name")).EQUALS(subjectname),
RETURN.value(n)
});
JcQueryResult result = dbAccess.execute(query);