Neo4j-需要图形数据库
简单地说,我们可以说图数据库主要用于存储更多的连接数据。
如果我们使用RDBMS数据库来存储更多连接的数据,那么它们不能提供用于遍历大量数据的适当性能。 在这些情况下,Graph Database提高了应用程序性能。
如今,大多数社交网络应用程序(如Facebook,Google +,LinkedIn,Twitter,Yammer等)和视频托管应用程序(如Google YouTube,Flickr,Yahoo Video等)都在使用更多连接的数据。
Neo4j的特点
SQL就像简单的查询语言Neo4j CQL
通过使用Apache Lucence支持索引
支持完整的ACID(原子性,一致性,隔离性和持久性)规则
采用原生图形库与本地GPE(图形处理引擎)
支持查询的数据导出到JSON和XLS格式
提供了REST API,可以被任何编程语言(如Java,Spring,Scala等)访问
提供了可以通过任何UI MVC框架(如Node JS)访问的Java脚本
支持两种Java API:Cypher API和Native Java API来开发Java应用程序
Neo4j的优点
很容易表示连接的数据
检索/遍历/导航更多的连接数据是非常容易和快速的
非常容易地表示半结构化数据
Neo4j CQL查询语言命令是人性化的可读格式,非常容易学习
使用简单而强大的数据模型
不需要复杂的连接来检索连接的/相关的数据,因为它很容易检索它的相邻节点或关系细节没有连接或索引
Neo4j的缺点或限制
即使最新版本,它具有支持节点数,关系和属性的限制。
它不支持Sharding。
安装:
1.下载地址: https://neo4j.com/download/ (Edition: for individual)
2.安装
tar xvf ./././neo4j-community-3.2.3-unix.tar.gz
is require java version at least 1.8
3.启动服务
cd ././neo4j-community-3.2.3-unix/bin
./neo4j console
4.打开浏览器窗口
http://localhost:7474/
Neo4j 使用cypher语言进行操作
1、创建节点
create (a) 创建空节点
create (a:Person) 创建标签(可以理解为类)为Person的节点
create (a:Person {name:‘Kaine‘,age:28}) 创建标签为Person,属性name值为Kaine,属性age值为28的节点
2、创建关联
match (a),(b)
where a.name=‘Kaine‘ and b.name=‘Sharon‘
create (a)-[r]->(b) 创建a节点和b节点的路径,此时变量r即代表关联,它也可以有标签
3、查询
match (n) return n 查询所有节点及关联
match (a)-[r]->(b) where a.name=‘Kaine‘ return a,b
查询属性name的值是Kaine的节点,及其所有关联节点
match (a)-[*1..3]->(b) where a.name=‘Kaine‘ return a,b
查询属性name值是Kaine的节点,及其所有距离为1到3的关联节点,
match (a)-[*2]->(b) where a.name=‘Kaine‘ and not (a)-[*1]->(b) return a,b
查询属性name的值是Kaine的节点,及其所有距离为2并且去除距离为1的节点。
(在计算好友的好友时会用到,即如果a、b、c三个人都认识,如果仅计算跟a距离为2的人的时候会把b、c也算上,因为a->b->c,或者a->c->b都是通路)
java使用neo4j
1、加载neo4j相关类包
在eclipse项目中:
Build Path -> configuration Build Path ->Add Library ->User Library
->New -> Add external JARS (neo4j 安装路径的lib下的jar包)
2、java代码示例
package neo4jTest;
import java.io.File;
import org.neo4j.graphdb.factory.GraphDatabaseFactory;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Transaction;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.Relationship;
import org.neo4j.graphdb.RelationshipType;
import org.neo4j.graphdb.Label;
public class Java_connect_neo4j {
//节点间的关系,枚举类型
public enum TutorialRelationships implements RelationshipType{
PartOf,
Equal;
}
//节点所属的label,枚举类型
public enum NodeGroup implements Label{
Address,
Weapon;
}
public static void main(String[] args) {
//数据库路径
File file = new File("/usr/YF_Folder/neo4j-community-3.2.3/data/databases/neo4j.db");
GraphDatabaseFactory dbFactory = new GraphDatabaseFactory();
GraphDatabaseService db = dbFactory.newEmbeddedDatabase(file);
try(Transaction tx = db.beginTx()){
//创建node
Node ZGNode = db.createNode(NodeGroup.Address);
ZGNode.setProperty("ID", "001");
ZGNode.setProperty("NAME", "中国");
Node WHNode = db.createNode(NodeGroup.Address);
WHNode.setProperty("ID", "002");
WHNode.setProperty("NAME", "武汉");
Node CDNode = db.createNode(NodeGroup.Address);
CDNode.setProperty("ID", "003");
CDNode.setProperty("NAME", "成都");
//创建node间的关系
Relationship relationship = WHNode.createRelationshipTo(ZGNode, TutorialRelationships.PartOf);
relationship.setProperty("relation","partOf");
tx.success();
}
System.out.println("The opration is successfully!");
}
}
查看刚才使用java代码对neo4j数据库的操作结果:
数据库文件路径:刚才的源代码中
/usr/YF_Folder/neo4j-community-3.2.3/data/databases/neo4j.db
由于neo4j 默认加载的 /neo4j-community-3.2.3/data/databases/graph.db数据文件
我们需要修改的配置文件
/neo4j-community-3.2.3/conf/neo4j.conf 中:
dbms.active_database= /usr/YF_Folder/neo4j-community-3.2.3/data/databases/neo4j.db

364

被折叠的 条评论
为什么被折叠?



