在两个不同商店中的嵌套游标

时间:2019-07-23 14:24:56

标签: xodus

我有以下代码:

...

Transaction xodusTransaction = xodusEnvironment.beginReadonlyTransaction();

Store leftStore = xodusEnvironment.openStore(leftName, StoreConfig.USE_EXISTING, xodusTransaction, false);

Store rightStore = xodusEnvironment.openStore(rightName, StoreConfig.USE_EXISTING, xodusTransaction, false);

try(Cursor leftCursor = leftStore.openCursor(xodusTransaction);
Cursor rightCursor = rightStore.openCursor(xodusTransaction)) {

  while(leftCursor.getNext()) {
    while(rightCursor.getNext()) {
    // Do actual work with data from both stores
    }
  }
}
... 

我希望内部循环将触发N * M次,其中N-leftStore的基数,M-rightStore的基数。

在实践中,外部循环仅触发一次,内部循环触发M次。

如果我按以下方式重写代码(讨人喜欢的嵌套循环):

...
while(leftCursor.getNext()) {
 ...
}

while(rightCursor.getNext()) {
 ...
}

...

然后,这两个循环都会按预期对leftStore触发N次,为rightStore触发M次。

问题是:是否可以使嵌套游标移动?如果是,请指导我。

谢谢!

-塔拉斯

1 个答案:

答案 0 :(得分:0)

一旦cursor.getNext()返回false(不存在 next 键/值对),它将永远不会为该Cursor实例返回true。要再次遍历商店,请重新打开光标。

以下是代码以矩阵形式遍历两个商店,即两个商店中键/值对的所有成对组合:

try (Cursor leftCursor = leftStore.openCursor(txn)) {
    while (leftCursor.getNext()) {
        try (Cursor rightCursor = rightStore.openCursor(txn)) {
            while (rightCursor.getNext()) {
                // Do actual work with data from both stores
            }
        }
    }
}