Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 使用py2neo时编写neo4j的性能_Performance_Neo4j_Py2neo - Fatal编程技术网

Performance 使用py2neo时编写neo4j的性能

Performance 使用py2neo时编写neo4j的性能,performance,neo4j,py2neo,Performance,Neo4j,Py2neo,我正在尝试在我的应用程序中使用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(T

我正在尝试在我的应用程序中使用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
  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
  pyneo, version 1.6.4
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
  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
  pyneo, version 1.6.4
客户端配置:

  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
  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
  pyneo, version 1.6.4
客户端中的代码:

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 pn.id IS UNIQUE')
self.query.execute()
self.query=neo.CypherQuery(self.graph_db,'CREATE CONSTRAINT ON (pm:GID)
ASSERT pm.id IS UNIQUE')
self.query.execute()

// Cypher clause
MERGE(first:{TYPE1} {{id:'{val1}'}})
MERGE (second:{TYPE2} {{id:'{val2}'}})
MERGE (first)-[r:{RTYPE}]->(second) ON CREATE SET r.weight={weight_set} ON
MATCH SET {weight_compute}
WITH r
SET r.half_life={half_life},
    r.update_time=TIMESTAMP(),
    r.threshold={threshold}
WITH r
WHERE r.weight<r.threshold
DELETE r

self.query=neo.CypherQuery(self.graph_db,self.create_rels.
     format(TYPE1=entity1[0],val1=entity1[1],
            TYPE2=entity2[0],val2=entity2[1],
            RTYPE=rel_type,weight_set=weight_set,

weight_compute=CYPHER_WEIGHT_COMPUTE,half_life=half_life,threshold=threshold))
结果:

当我使用24个python线程和py2neo编写59229个节点时,236048 关系,属性。平均时间费用约为1316 秒。结果不能满足我的实时需要,它会很好地为我工作 如果时间消耗减少到150秒。以及每一个的时间开销 当数据规模增加时,节点/关系将增加

问题:

除了 优化cypher子句并使用批插入?我已经试过了 配置不同大小的jvm堆和对象缓存的方法。我发现 它对写性能的影响较小,我认为原因可能是 节点/关系的小规模,从数千到上万, 在大规模的节点/关系中,效率可能非常重要 千万,几十亿

neo4j的读写性能可以达到多少nps或rps 您在数十亿个节点/关系中的体验

我还发现neo4j不能自动进行切分,但确实存在 关于文档中基于缓存的分片的一节,如果我使用基于缓存的分片 使用HAproxy进行切分时,如何处理节点之间的关系 一直在分片到不同的机器吗?也就是说 关系不会因为碎片而破裂

主/从模式能否同时用于社区和企业版本

提前谢谢

问候

你必须按照不同的要求来做这些吗?我建议您使用事务性密码端点:

取决于所使用的查询和API。以及计算读写次数的方法。使用事务性http API,我已经成功地通过两个节点和一个rel每秒获得30k个cypher create语句。合并速度稍微慢一点,您需要确保使用的是约束索引

其思想是通过允许用户子集或您可以定义的子集在特定集群节点上查询来保持缓存数据的子集。如果查询需要遵循的关系没有被缓存,它将最终从磁盘读取。所有数据必须位于群集所有成员的磁盘上

我不确定,但我很确定所有集群功能都是随企业提供的

你必须按照不同的要求来做这些吗?我建议您使用事务性密码端点:

取决于所使用的查询和API。以及计算读写次数的方法。使用事务性http API,我已经成功地通过两个节点和一个rel每秒获得30k个cypher create语句。合并速度稍微慢一点,您需要确保使用的是约束索引

其思想是通过允许用户子集或您可以定义的子集在特定集群节点上查询来保持缓存数据的子集。如果查询需要遵循的关系没有被缓存,它将最终从磁盘读取。所有数据必须位于群集所有成员的磁盘上

我不确定,但我很确定所有集群功能都是随企业提供的


是否确实使用预期的标签创建节点?抱歉,您无法参数化标签/reltype。这可能会影响标签约束索引的使用。我认为对于您的海量数据。我不会使用cypher,而是使用一个服务器扩展,它有一个专用的端点来消耗大量数据,然后使用Neo4j Java API相应地批处理插入。我想我已经解决了性能问题,但是切分问题现在很关键。我们不能使用基于缓存的分片,因为数据量大,图形的连通性和易变性。我想我应该放弃图形数据库。你确定节点是用预期的标签创建的吗?抱歉,您无法参数化标签/reltype。这可能会影响标签约束索引的使用。我认为对于您的海量数据。我不会使用cypher,而是使用一个服务器扩展,它有一个专用的端点来消耗大量数据,然后使用Neo4j Java API相应地批处理插入。我想我已经解决了性能问题,但是切分问题现在很关键。我们不能使用基于缓存的分片,因为数据量大,图形的连通性和易变性。我想我应该放弃图形数据库。我刚刚意识到我回答了一个稍微不同的2。1B节点/相关信息
好吧,你会想要很多羊的。嗨,韦斯,第三个答案我也有点怀疑。假设有一条路径a-b-[n..]-q,其中n>500。路径中的节点已经分片到不同机器的缓存中,那么如何保证节点之间的关系不被破坏呢?感谢我认为在这个分片缓存概念中您缺少的关键点是所有数据必须在所有机器上。缓存包含一个子集,在缓存未命中的情况下必须从磁盘读取。好的,我想我已经知道缓存分片的含义了。但当数据规模太大,无法存储在几台机器上时,它还不能解决这个问题。也许这个问题实际上是一个NP难问题,因为图形具有连通性和易变性。我刚刚意识到我回答了一个稍微不同的2。1B节点/rels应该很好,你需要很多ram。嗨,韦斯,第三个答案我也有一些疑问。假设有一条路径a-b-[n..]-q,其中n>500。路径中的节点已经分片到不同机器的缓存中,那么如何保证节点之间的关系不被破坏呢?感谢我认为在这个分片缓存概念中您缺少的关键点是所有数据必须在所有机器上。缓存包含一个子集,在缓存未命中的情况下必须从磁盘读取。好的,我想我已经知道缓存分片的含义了。但当数据规模太大,无法存储在几台机器上时,它还不能解决这个问题。由于图的连通性和易变性,这个问题可能实际上是一个NP难问题