Neo4j缓存配置

时间:2014-04-30 18:04:59

标签: neo4j

我一直在玩JVM的堆大小和Neo4j中的文件存储缓存大小。似乎设置由OS处理的内存映射缓冲区对系统没有任何影响。

我尝试使用一个小型缓存来设置JVM堆非常大,并且它与缓存很大时一样快。

所以我的问题是:如何配置系统以允许我控制缓存?这是批处理的一个问题,因为它说它使用JVM堆?

我使用以下python脚本来填充数据库

neo4j.GraphDatabaseService("http://localhost:7474/db/data/")

f = open('indexslowdown_exp.txt','w')
f.write("Properties\t,\tSpeed\n")
total_time = timedelta(0)
name = 0
for y in range(0,1000):
    batch = neo4j.WriteBatch(graph_db)
    for x in range(0,100): 
        batch.create({"name":name})
        name += 1
    for x in range(0,100):
        rand_node_A = random.randint(0,name-1)
        rand_node_B = random.randint(0,name-1) 
        batch.append_cypher("START n=node("+str(rand_node_A)+"),    m=node("+str(rand_node_B)+") CREATE (n)-[r:CONNECTED]->(m)")    
    start_time = datetime.now()
    batch.submit()
    end_time = datetime.now()
    total_time = (end_time-start_time)
    f.write(str(name)+" , "+str((total_time)/200)+"\n")
    print "Inserting nodes: " + str(total_time)
f.close()

Neo4j.properties文件:

use_memory_mapped_buffers=true

/# Default values for the low-level graph engine
neostore.nodestore.db.mapped_memory=1k
neostore.relationshipstore.db.mapped_memory=1k
neostore.propertystore.db.mapped_memory=2k
neostore.propertystore.db.strings.mapped_memory=1k
neostore.propertystore.db.arrays.mapped_memory=1k

 # Enable this to be able to upgrade a store from an older version
 #allow_store_upgrade=true

 # Enable this to specify a parser other than the default one.
 #cypher_parser_version=2.0

 # Keep logical logs, helps debugging but uses more disk space, enabled for
 # legacy reasons To limit space needed to store historical logs use values such
 # as: "7 days" or "100M size" instead of "true"
keep_logical_logs=true

 # Autoindexing

 # Enable auto-indexing for nodes, default is false
 #node_auto_indexing=true

 # The node property keys to be auto-indexed, if enabled
 #node_keys_indexable=name,age

 # Enable auto-indexing for relationships, default is false
 #relationship_auto_indexing=true

 # The relationship property keys to be auto-indexed, if enabled
 #relationship_keys_indexable=name,age

的Neo4j-包装

 wrapper.java.additional=-Dorg.neo4j.server.properties=conf/neo4j-server.properties
 wrapper.java.additional=-Djava.util.logging.config.file=conf/logging.properties
 wrapper.java.additional=-Dlog4j.configuration=file:conf/log4j.properties

 #********************************************************************
 # JVM Parameters
 #********************************************************************

wrapper.java.additional=-XX:+UseConcMarkSweepGC
wrapper.java.additional=-XX:+CMSClassUnloadingEnabled

 # Uncomment the following lines to enable garbage collection logging
wrapper.java.additional=-Xloggc:data/log/neo4j-gc.log
wrapper.java.additional=-XX:+PrintGCDetails
wrapper.java.additional=-XX:+PrintGCDateStamps
wrapper.java.additional=-XX:+PrintGCApplicationStoppedTime
wrapper.java.additional=-XX:+PrintTenuringDistribution

 # Initial Java Heap Size (in MB)
wrapper.java.initmemory=200

 # Maximum Java Heap Size (in MB)
wrapper.java.maxmemory=400

 #********************************************************************
 # Wrapper settings
 #********************************************************************
 # Override default pidfile and lockfile 
 #wrapper.pidfile=../data/neo4j-server.pid
 #wrapper.lockfile=../data/neo4j-server.lck

 #********************************************************************
 # Wrapper Windows NT/2000/XP Service Properties
 #********************************************************************
 # WARNING - Do not modify any of these properties when an application
 #  using this configuration file has been installed as a service.
 #  Please uninstall the service before modifying this section.  The
 #  service can then be reinstalled.

 # Name of the service
wrapper.name=neo4j

 # User account to be used for linux installs. Will default to current
 # user if not set.
wrapper.user=

2 个答案:

答案 0 :(得分:1)

你最关心的是什么?批量插入性能?如果是这样,如果您可以将整个图形放入内存中,MMIO将是最有效的,因此如果您可以估计节点和关系的数量,则可以粗略计算这两个商店所需的大小。

另外,如果您只想插入基元,则可以估计所需的属性存储的大小。如果您要存储字符串和数组(较大类型),您也可以增加这两个商店的MMIO设置,但如果您不需要它们,请将它们设置为低。

约节点存储的大小:节点数* 14个字节(如果您使用最新的Neo4j;如果Neo4j <2.0则为9个字节)

约关系存储的大小:rels的数量* 33个字节

请记住:磁盘上的存储大小与文件系统缓存的内存之间的距离接近1:1。

同样,更大的JVM堆并不一定意味着更高的性能;实际上,MMIO大小(取决于您设置use_memory_mapped_buffers的值)可能位于JVM堆之外。无论如何,大型JVM堆还会引入更长的GC暂停和其他与GC相关的问题,因此不要太大。

HTH

答案 1 :(得分:0)

您使用的操作系统是什么?你可以分享你的配置和graph.db / messages.log吗?

您的疑问:

  • 使用参数!
  • 使用标签&amp;索引在2.0.x
  • 尽量不要在性能测试循环中使用随机
  • 确保使用流媒体