【发布时间】:2015-04-07 09:28:09
【问题描述】:
我需要将大约 50 亿个顶点加载到 OrientDB。
OrientDB 文档声称每个集群可以容纳超过 90 亿个顶点,并且一天可以插入多达 100 亿个文档。但是,我已经运行了几天,并且只创建了我的数据的一小部分。
我的模型很简单……
Person
-> Name STRING
-> Score DECIMAL
1.
我让 OrientDB oetl 工具保持运行状态,它在一周内插入了 5 亿条记录。记录仍然(非常缓慢)以每秒约 100 行的速度加载。它以每秒大约 1500 个节点开始,但逐渐放缓。目前的估计表明加载所有数据需要几个月的时间(!)
2.
同时我已经编写了一个单独的 java 应用程序来测试批量插入
final OrientGraphFactory factory = new OrientGraphFactory("plocal:C:/orientdb/databases/test", "X", "X");
factory.declareIntent(new OIntentMassiveInsert());
OrientGraphNoTx graph = factory.getNoTx();
for (int i= 0; i < NUM_INSERTLOOPS; i++)
{
OrientVertex v = graph.addVertex("person", "12");
v.setProperty("Name", "test" + i);
v.setProperty("Score", 100 * i);
}
graph.commit();
这也开始很好,大约 8 秒内有 100k 个节点,但在 1000 万左右之后,这似乎突然减慢到超过 5 分钟。我在 24 小时和 5000 万个节点后停止了它。
我正在一台配置良好的 Windows 机器上运行本地数据库。运行任一进程时,CPU 使用率约为 1%。 oetl 使用了大约 15B 的 20GB RAM,java 程序要少得多。
这是预期的表现还是我误解了什么。我很高兴等待几天来加载我的数据,但不是几周(/几个月!!)
【问题讨论】:
-
在
etl.json,在加载器中你设置了batchCommit?像this 这样的东西。也许会有所帮助。 -
其实我没有设置了batchCommit,我昨天早上启动了一个新的etl导入,设置为1000。这似乎启动得更快,已经加载了1.5亿24 小时内的节点 - 感谢您的提示。然而,在大约 1 亿个节点之后,它又突然变慢了,我目前每秒大约有 10 个节点......
标签: java performance orientdb