两个不同商店的嵌套游标
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
}
}
}
}
我有以下代码:
...
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
}
}
}
}