- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
1. 字符串函数
功能 | 描述 |
---|---|
UPPER | 将所有字母改为大写 |
LOWER | 将所有字母改为小写 |
SUBSTRING | 将获取指定范围的子字符串 |
REPLACE | 替换一个字符串的子字符串 |
match (p:Person) return ID(p),LOWER(p.character)
2. 聚合函数
聚集功能 | 描述 |
---|---|
COUNT | 它返回由MATCH命令返回的行数 |
MAX | 它从MATCH命令返回的一组行返回最大值 |
MIN | 它返回由MATCH命令返回的一组行的最小值 |
SUM | 它返回由MATCH命令返回的所有行的求和 |
AVG | 它返回由MATCH命令返回的所有行的平均值 |
示例:
match (p:Person) return max(p.money)
3. 关系函数
功能 | 描述 |
---|---|
STARTNODE | 用于知道关系的开始节点 |
ENDNODE | 用于知道关系的结束节点 |
ID | 用于知道关系的ID |
TYPE | 用于知道字符串表示中的一个关系的TYPE |
示例:
match p=(:Person {name:"范闲"})-[r:Couple]-(:Person) return ENDNODE(r)
match p=(:Person {name:"范闲"})-[r:Couple]-(:Person) return type(r)
4. 返回最短路径
shortestPath函数
示例:
match p=shortestPath((person:Person {cid:1})-[*]-(person2:Person {cid:8})) return length(p),nodes(p)
1. 使用with关键字
查询三层级关系节点如下:with可以将前面查询结果作为后面查询条件
match (na:Person)-[re]->(nb:Person) where na.name="范闲" WITH na,re,nb match (nb:Person)-
[re2]->(nc:Person) return na,re,nb,re2,nc
2. 直接拼接关系节点查询
match data=(na:Person{name:"范闲"})-[re]->(nb:Person)-[re2]->(nc:Person) return data
3. 使用深度运算符
-[:TYPE*minHops..maxHops]-
minHops代表最小深度,maxHops代表最大深度。
match data=(na:Person{cid:1})-[*1..2]-(:Person) return data
Neo4j支持ACID特性
Neo4j支持在节点或关系的属性上建立索引,以提高应用程序的性能。可以在Match或where等运算符上使用这些索引改进SQL的执行。
CREATE INDEX ON :Label(property)
示例:
create index on:Person(name)
create index on:Person(age,gender)
常规索引只能对字符串进行精确匹配或前后缀索引,而全文索引可以匹配字符串任何位置的词语。
使用db.index.fulltext.createNodeIndex和db.index.fulltext.createRelationshipIndex可以分别为节点和关系创建全文索引。在创建索引时,必须指定唯一的名称,用于查询和删除索引时要引用。
call db.index.fulltext.createNodeIndex("索引名",[Label,Label],[属性,属性])
示例:
call db.index.fulltext.createNodeIndex("nameAndDescription",["Person"],["name",
"description"])
call db.index.fulltext.queryNodes("nameAndDescription", "范闲") YIELD node, score
RETURN node.name, node.description, score
call db.indexes 或:schema
DROP INDEX ON :Person(name)
DROP INDEX ON :Person(age, gender)
call db.index.fulltext.drop("nameAndDescription")
作用:唯一性约束用于避免重复记录
1. 创建唯一性约束
CREATE CONSTRAINT ON (变量:<label_name>) ASSERT 变量.<property_name> IS UNIQUE
示例:
create constraint on(person:Person) assert person.name is unique
2. 删除唯一性约束
drop constraint on (person:Person) assert person.name is unique
3. 查看约束
call db.constraints
#或
:schema
1. 备份和恢复
bin/neo4j stop
bin/neo4j-admin dump --database=graph.db --to=/usr/local/qyn.dump
然后启动服务,删除所有数据。然后在停止服务,准备恢复
match (p)-[r]-() delete p,r
bin/neo4j-admin load --from=/usr/local/qyn.dump --database=graph.db --force
注意:运行数据备份可能会警告
WARNING: Max 1024 open files allowed, minimum of 40000 recommended. See the Neo4j manual
编辑这个文件:vim /etc/security/limits.conf,在文件最后面加上这段,修改最大打开文件限制,在重启服务器就行了。
* soft nofile 65535
* hard nofile 65535
2. Neo4j调优
2.1 调整neo4j配置文件
# neo4j初始堆内存
dbms.memory.heap.initial_size=512m
# 最大堆内存
dbms.memory.heap.max_size=512m
# pagecache大小,官方建议设为:(总内存-dbms.memory.heap.max_size)/2
dbms.memory.pagecache.size=10g
2.2 数据预热
match (n)
optional match (n)-[r]->()
return count(n.name)+count(r)
有如下两个命令:
示例:
profile match (p:Person {name:"范闲"}) return p
需要关注指标:
关注指标:
estimated rows: 需要被扫描行数的预估值
dbhits: 实际运行结果的命中绩效
Neo4j访问有两种方式:
嵌入式数据库
嵌入式Neo4j数据库是性能的最佳选择,通过指定数据存储的路径以编程的方式访问。我们选择嵌入式数据库有如下的原因:
服务器模式
Neo4j Server是相互操作性、安全性和监控的最佳选择。实际上,REST接口允许所有现代平台和编程语言与它进行交互操作。此外,作为独立应用程序,他比嵌入式配置更安全(客户端的故障不会影响服务器),更易于监控。而且可以使用任意编程语言以REST的方式访问数据库。
2.1 嵌入式模式
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j</artifactId>
<version>3.5.5</version>
</dependency>
新增数据
public static void add(){
GraphDatabaseService graphDb= new GraphDatabaseFactory().newEmbeddedDatabase(databaseDirectory);
System.out.println("database load");
Transaction tx = graphDb.beginTx();
Node node = graphDb.createNode();
node.setProperty("name","张三");
node.setProperty("character","A");
node.setProperty("money",2330);
node.addLabel(() -> "Person");
tx.success();
tx.close();
graphDb.shutdown();
}
查询数据
public static void query(){
GraphDatabaseService graphDb= new GraphDatabaseFactory().newEmbeddedDatabase(databaseDirectory);
System.out.println("database load");
String cql="match (a:Person) where a.money < $money return a";
Map<String,Object> paramerters= new HashMap<>();
paramerters.put("money",2500);
Transaction tx=graphDb.beginTx();
Result result = graphDb.execute(cql, paramerters);
while (result.hasNext()){
Map<String, Object> row = result.next();
for (String key : result.columns()){
Node nd = (Node)row.get(key);
System.out.printf("%s = %s:%s%n",key,nd.getProperties("name"),nd.getProperties("money"));
}
}
tx.success();
tx.close();
graphDb.shutdown();
}
2.2 服务器模式
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-ogm-bolt-driver</artifactId>
<version>3.2.10</version>
</dependency>
查询示例:
public static void query(){
Driver driver = GraphDatabase.driver("bolt://192.168.56.115:7687", AuthTokens.basic("neo4j", "123456"));
Session session = driver.session();
String cql="match (a:Person) where a.money > $money return a.name as name,a.money as money order by a.money";
Result result = session.run(cql, Values.parameters("money", 400));
while (result.hasNext()){
Record record = result.next();
System.out.println(record.get("name").asString()+" "+record.get("money").asDouble());
}
session.close();
driver.close();
}
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-neo4j</artifactId>
</dependency>
spring.data.neo4j.username=neo4j
spring.data.neo4j.password=123456
spring.data.neo4j.uri= bolt://192.168.56.115:7687
@NodeEntity
@Data
public class Person {
@Id
@GeneratedValue
private Long id;
private Integer cid;
private String name;
private String character;
private Double money;
private Integer gender;
private Integer age;
private String description;
@Relationship(type = "Friend",direction = Relationship.OUTGOING)
private Set<Person> relationPersons;
@Repository
public interface PersonRepository extends Neo4jRepository<Person,Long> {
@Query("match(p:Person) where p.money > {0} return p")
List<Person> personList(Double money);
@Query("match p=shortestPath((person:Person {name:{0}}) - [*1..2] - (person2:Person {name:{1}})) return p ")
List<Person> shortestPath(String startName,String endName);
}
Iterable<Person> all = personRepository.findAll();
System.out.println(all);
书山有路勤为径,学海无涯苦作舟
我已经在 OSX 上安装了 Docker 并下载了 neo 镜像。当我运行它时(使用图像主页中的 args),一切似乎都正常,但日志的最后几行表明如下: 00:20:39.662 [main] INF
我的正则表达式在 neos 项目中不能正常工作。DD/MM/YYYY 的正则表达式(仅限 19XX-20XX) var date_regex = /^(0[1-9]|1\d|2\d|3[01])\/(
Neo 4j可以与HDFS / Hadoop集成吗?在处理涉及许多关系且每秒具有大量事务的大型数据集时,通常使用Hadoop来提高Neo 4j的处理能力。 最佳答案 这是一个非常广泛的问题。也许考虑提
我尝试在 NEO 环境中使用 TenantAccessor。TenantAccessor.getCurrentTenant().getTenantId() 生成的 TenantId 作为 GUID 返
我下载了Neoclipse Source并下载了 Neo4J source 。但是 Neo4J 源文件中找不到 Neoclipse 源文件引用的某些类。它们已被弃用吗?我可以获得 Neoclipse
进程文件: neo or neo.exe 进程名称: Price Patrol 进程类别:存在安全风险的进程 英文描述: neo.exe is the execuatble for Pric
load csv with headers from 'file:///C:/Users/user/Desktop/Neo4J' as row Create (:State_Code {state_c
如何在 SAPUI5 应用程序的运行时为 neo-app.json 文件的 routes 部分定义新条目?例如在 Component.js 内部。 例如,我想将以下条目添加到文件中,或者将一些代码添加
我最近将一台计算机变成了 Ubuntu 服务器。我已经按照下面的文章 http://neos.readthedocs.io/en/stable/GettingStarted/Installation.
我正在尝试了解如何使用 NEOS Server for SCIP .我已经阅读了有关 CPLEX LP file format 的教程.但我仍然得不到任何结果。 让我们以该教程中提供的示例为例: Ma
关于这一年Bubble Cup (完)有问题NEO (我无法解决),它要求 给定一个包含 n 个整数元素的数组。我们把它分成几个部分(可能是1个),每个部分都是一个连续的元素。这种情况下的 NEO 值
我的 Rails 应用程序必须使用 Neo4j。所以我开始安装 neo4j 服务器。我按照步骤安装 here在 Linux 上。 但是当我运行的时候 ./bin/neo4j console 它给了 E
我刚从 windows 10 切换到 arch linux我想使用 (Neo)Vim 作为我的代码编辑器我已经完成了自动编译和模糊查找器但我不知道如何在 (Neo)Vim 中调试 任何帮助! 最佳答案
我想问一下,如何使用Spring boot找到Dijkstra。 我目前使用 spring-boot-starter-data-neo4j 库将 Neo4j 与我的 java 类映射。 我现在想使用
我正在尝试创建一个可以从 U2F token (例如 Java 语言的 Yubikey Neo)检索公钥和私钥的应用程序。我尝试在控制台中使用简单的扫描仪从 Yubikey Neo 获取任何内容,但它
我想用摩托罗拉68000汇编器写一个程序,目标平台是Neo Geo(九十年代的游戏机);这个问题很严重,我有一个我想实现的特定项目并且我有编程经验(虽然我现在主要是 Perl/R 编程,但我以前只接触
我使用自定义 Web 服务作为 neo4j 的非托管扩展。 这是 Neo4j 提供的详细信息,我已遵循该详细信息并创建了自己的非托管扩展。 http://neo4j.com/docs/stable/s
Typo3 Neos 是否原生支持元素的响应行为?例如像 css 网格类(col-sm-?? 或 col-md-??)这样的 Bootstrap ,或者我可以使用 Neos 通过 hidden-xs
我是为嵌入式板构建自定义 Linux 操作系统的新手 - 所以请忽略我的无知。 我有一个名为 NanoPi NEO 的开发板,它具有定制的 Debian Linux。现在开发板附带一个 .img 文件
我正在尝试使用脚本在 NEO4j db 中导入 csv 文件: LOAD CSV FROM "file:///dataframe6.txt" AS line RETURN count(*) 但我收到以
我是一名优秀的程序员,十分优秀!