两个不同商店的嵌套游标

Nested Cursors over two different Stores

我有以下代码:

...

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 次。

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

谢谢!

-塔拉斯

一次cursor.getNext()returnedfalse(没有key/value对),永远不会return true 对于这个 Cursor 实例。要再次遍历 Store,请重新打开光标。

下面是将两个商店作为矩阵遍历的代码,即来自两个商店的 key/value 对的所有成对组合:

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
            }
        }
    }
}