我在使用 BatchInserter 期间观察到严重的减速,希望得到帮助或确认(所以我会知道 neo4J 是否是一个可行的选择)。
配置数据如下。
基本上,我们正在评估 Neo4J 在我们的链接项目中的使用,我已经准备了包含消费者、地址及其家庭和县文件的文件。
每个尺寸约为 200M - 400M。
开始很好。
消费者负载 216M 无索引 - 每 5 秒 1 M 有 2 个 Lucene 索引 每 15 秒 1M。
注意到下一步减速,但我将其归因于地址文件 170M 没有索引的地址加载的双倍属性 - 每 15 秒 1M。
下一次减速非常明显,即使在数据库上创建 BatchInserter 也需要 10 分钟才能立即生效。
每 70 秒处理 350M - 1M 的消费者负载,并逐渐减慢关闭时间(如数小时)。
现在情况变得更糟了。1.5 亿个家庭 - 第一个 1M 花了 1000 秒,现在虽然在 10M 之后它下降到 100 秒的 1M 记录(家庭只有 3 个属性)。
为什么它会因为基本上将实体附加到数据库而减慢,除非涉及索引,否则在任何其他数据库实现中从未见过它。我手动创建的索引有可能变成自动的吗?
BatchInserterIndexProvider indexProvider = new LuceneBatchInserterIndexProvider(inserter); BatchInserterIndex iNames = indexProvider.nodeIndex("Names", MapUtil.stringMap("type","exact")); ... for(String name : fullNames) { iNames.add(node,MapUtil.map("names",name)); } ... indexProvider.shutdown(); inserter.shutdown();
我在慢速关系插入中使用了先前线程中的设置。还有什么可以在机器或程序上设置的吗?
我对 Java 不是很精通,特别是 Jvm 设置和环境。所以当谈到运行时,你的解释要温和。
服务器是 Windows 2008
256GB 内存和 42 个 2.8 核 (AMD)。该驱动器不是企业级的,但足够快。
Neo4j 在 Milestone 6 版本 2.0
和批量加载是用 Java 编写的。JDK 7
PS 不相关,但任何人都知道为什么我不能将其发布到 Google 组 Neo4j,尝试了 3 次。