2

我想查看图表中的所有“用户”节点并对它们执行一些操作。

问题是我有太多的“用户”节点,我不能把它们都放在堆上。

所以,做类似的事情:

try (Transaction tx = graphDb.beginTx())
{
   Iterator<Node> n_column = autoNodeIndex.get( "type", "user" );   


   while (n_column.hasNext()) {
     //create relationship for node...
   }
   tx.success();
}

会导致 GC 开销异常。

如何将其拆分为少数事务,但在同一个迭代器上?

我考虑过嵌套事务,但手册上说的不同。嵌套事务会将本地内存滚动到顶部事务。

4

1 回答 1

2

只需添加一个计数器,然后每 50.000 个节点提交并启动一个新事务。

   Transaction tx = graphDb.beginTx();
   Iterator<Node> n_column = autoNodeIndex.get( "type", "user" );   

   int counter=0;
   while (n_column.hasNext()) {
     //create relationship for node...
     if (++counter % 50000 == 0) {
        tx.success(); tx.close();
        tx = graphDb.beginTx();
     }
   }
   tx.success(); 
   tx.close();
于 2013-11-03T16:05:36.807 回答