我试图在neo4j中插入唯一的节点和关系.
我在用什么: -
数据大小和类型:
TSV文件[多个].每个包含超过8百万行[每行代表一个节点或关系].节点有10多个文件.[= 2百万个节点]和另外200万个关系.
我使用UniqueNodeFactory插入节点.并且顺序插入,找不到任何方式插入批处理保留唯一节点.
问题是插入数据需要花费大量时间.例如,插入30万个唯一节点花了差不多一天.有没有办法固定插入?
我有一个问题是以排序链表的形式(在单个密码查询中)连接数据库中的电影列表.
电影节点数:25L
MATCH (movie:Movie)
WITH movie
ORDER BY movie.rating DESC
WITH collect(movie) as p
FOREACH (n IN nodes(p)| CREATE PREV_MOVIE-[:NextMovie]->(n) )
RETURN p
Run Code Online (Sandbox Code Playgroud)
这将需要参考以前的节点PREV_MOVIE和当前节点n的FOREACH建立两者之间的关系.如何在这里找到对前一个节点的引用PREV_MOVIE,或者还有其他方法可以做同样的事情吗?
我尝试运行以下查询,其中我在数据库和10个国家/地区拥有10个链.并使用20个地址的数组.然后我循环通过那些为国家,连锁店和地址的每个组合创建一个商店,期待10*10*20组合 - 2000个商店.但相反,查询运行直到创建大约200,000条记录,然后停止并显示未知错误.
MATCH (Chains:Chain), (Countries:Country)
WITH Collect(Chains) as ch,
Collect(Countries) as cou,
['Ullevål','Blindern','Centrum','Kringså','Lysaker','Skøyen','Fornebu','Stortinget','Nationalteatre','KarlJohan',
'Gamle','Grunerløkka','Grønland','Majorstuen','Snarøya','Asker','Sandvika','Drammen','Gothenburg','Stockholm'] as addresses
FOREACH(country in cou |
FOREACH (c in ch |
FOREACH (a in addresses |
CREATE (s:Store {name:c.name+"_"+a, address:a})
CREATE (s-[:BELONGS_TO]->c)
CREATE (s-[:IN]->country) )))
Run Code Online (Sandbox Code Playgroud) 我使用的是Neo4j的2.0.1版本.
我有一个名为prod的标签和一个名为id的属性.
我怀疑如下:
以下查询返回结果非常快:
profile match (p:PROD) where p.id="111" return p;
SchemaIndex(identifier="n", _db_hits=0, _rows=2, label="Prod", query="Literal(111)", property="id")
Run Code Online (Sandbox Code Playgroud)
但是当我使用IN并强制使用索引时使用列表:
profile match (p:PROD) USING INDEX p:PROD(id) where p.id IN ["111","222"] return p;
Run Code Online (Sandbox Code Playgroud)
它显示以下错误:
IndexHintException: Cannot use index hint in this context. The label and property comparison must be specified on a non-optional node
Label: `prod`
Property name: `id`
Run Code Online (Sandbox Code Playgroud)
为什么我不能使用USE INDEX方法来指定索引.我究竟做错了什么?我该如何纠正呢?
我使用这样的命令从csv成功创建命名节点:
load csv with headers from "file:/Users/lwyglend/Developer/flavourGroups.csv" as
flavourGroup
create (fg {name: flavourGroup.flavourGroup})
set fg:flavourGroup
return fg
Run Code Online (Sandbox Code Playgroud)
但是,我没有运气使用csv中的load来创建与类似命令的关系:
load csv with headers from "file:/Users/lwyglend/Developer/flavoursByGroup.csv" as
relationship
match (flavour {name: relationship.flavour}),
(flavourGroup {name: relationship.flavourGroup})
create flavour-[:BELONGS_TO]->flavourGroup
Run Code Online (Sandbox Code Playgroud)
从头部的csv文件看起来有点像这样:
flavour, flavourGroup
fish, marine
caviar, marine
Run Code Online (Sandbox Code Playgroud)
没有错误,命令似乎执行,但实际上没有创建任何关系.
如果我在名称上做一个简单的匹配:鱼和名称:海洋然后构建属于鱼和海洋预先存在的节点与密码之间的关系,这种关系设置得很好.
从csv导入是否有问题?我的代码错了吗?我玩了几个不同的东西,但作为neo4j的全新内容,你会欣赏任何建议.
我有以下密码查询:
MATCH (country:Country { name: 'norway' }) <- [:LIVES_IN] - (person:Person)
WITH person
MATCH (skill:Skill { name: 'java' }) <- [:HAS_SKILL] - (person)
WITH person
OPTIONAL MATCH (skill:Skill { name: 'javascript' }) <- [rel:HAS_SKILL] - (person)
WITH person, CASE WHEN skill IS NOT NULL THEN 1 ELSE 0 END as matches
ORDER BY matches DESC
LIMIT 50
RETURN COLLECT(ID(person)) as personIDs
Run Code Online (Sandbox Code Playgroud)
添加更多节点时似乎表现更差.现在只有5000个Person节点(Person节点可以与Skill节点有多个HAS_SKILL关系).现在,执行查询大约需要180毫秒,但添加另外1000个具有关系的Person节点会为查询添加30-40毫秒.我们计划拥有数百万个Person节点,因此每1000人添加40毫秒是不行的.
我在查询中使用参数而不是上面查询中的'norway','java','javascript'.我已经创建了索引:国家(名称)和:技能(名称).
我的查询目标是匹配生活在指定国家(挪威)的每个人,这些人也具有'java'技能.如果此人也具有技能'javascript',则应在结果中命令更高.
如何重构查询以提高性能?
如果我转出,那么:Country节点似乎也存在问题
MATCH (country:Country { name: 'norway' }) <- [:LIVES_IN] - (person:Person)
Run Code Online (Sandbox Code Playgroud)
同
MATCH (city:City …Run Code Online (Sandbox Code Playgroud) 我正在使用Neo4j和MongoDB和Grails,我想知道Maven Neo4j插件是否也为我的构建提供了Neo4j依赖项.同样适用于MongoDB.
我很迷惑.我应该使用什么,插件或依赖项?有什么不同?
我正在学习neo4j,并且正在制作类似于组织层次结构的东西,其中一个人有一个经理,他有一个经理,他有一个经理等等.
起初我使用了assumptoin,公司的所有者没有经理,并且我的需求正在努力向所有者展示自己和管理层.
为了解决这个问题,我使用了以下查询,它可以满足我的简单需求.
MATCH(baseEmployee:Employee)-[:MANAGEDBY*0..]->(manager)
where baseEmployee.Name = 'Josh'
RETURN manager.Name;
Run Code Online (Sandbox Code Playgroud)
但如果老板让经理自言自拔,会发生什么.根据我的理解,这将导致无限循环.
如果manager = currentEmployee,我如何阻止匹配跟随MANAGEDBY路径?
我想在我的应用程序中使用neo4j.现在我在实验中面临一些关键问题.问题陈述分为几个部分.
背景:
用例是从互联网获取数据,数据规模为十亿,现场是实时,关系只是具有多个属性的人对人.
组态:
机器配置:
cpu: 24 processors, Intel(R) Xeon(R) CPU E5-2620 v2 @ 2.10GHz
memory: 165 203 696 kB
jdk: java version "1.7.0_67", Java(TM) SE Runtime Environment (build 1.7.0_67-b01), Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)
Linux version: 2.6.32-431.el6.x86_64
OS: CentOS release 6.5
Run Code Online (Sandbox Code Playgroud)
Neo4j配置:
enterprise version: 2.1.5
jvm heap: default
objects cache:
neostore.nodestore.db.mapped_memory=512M
neostore.relationshipstore.db.mapped_memory=6G
neostore.propertystore.db.mapped_memory=5G
neostore.propertystore.db.strings.mapped_memory=1G
neostore.propertystore.db.arrays.mapped_memory=1G
Run Code Online (Sandbox Code Playgroud)
客户配置:
pyneo, version 1.6.4
Run Code Online (Sandbox Code Playgroud)
客户代码:
CYPHER_WEIGHT_COMPUTE='r.weight=r.weight+r.weight*EXP((TIMESTAMP()-r.update_time)/(r.half_life*1.0))'
// Initiation, create constraints according the label on id
self.query=neo.CypherQuery(self.graph_db,'CREATE CONSTRAINT ON (pn:UID)
ASSERT …Run Code Online (Sandbox Code Playgroud) 目前,每次启动Ubuntu时都会启动Neo4j服务.这是不受欢迎的行为,因为我使用它作为开发机器并不总是需要运行neo4j.
这是它的init.d脚本.你认为我应该编辑这个脚本以满足我的需求吗?我该怎么做呢?有更简单的替代方案吗?如果可能的话,我宁愿避免修改此代码.
#! /bin/sh
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Neo4j Graph Database"
NAME=neo4j
DAEMON=/var/lib/$NAME/bin/$NAME
DAEMON_ARGS="start"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME-service
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh
# Define LSB log_* functions.
. /lib/lsb/init-functions
do_start()
{
# Return
# 0 if daemon has been started
# 1 if daemon was already running …Run Code Online (Sandbox Code Playgroud) neo4j ×10
cypher ×5
csv ×1
dependencies ×1
init ×1
maven ×1
performance ×1
py2neo ×1
ubuntu ×1