在 Google Cloud DataStore 中插入后缺少实体
Missing entities after insertion in Google Cloud DataStore
在 Google Cloud DataStore 中插入 29447 个单一种类的实体后,我等待了大约 30 秒,然后检查该特定种类有多少实体。令人惊讶的是,我注意到其中一些丢失了(getCurrentKeys
returns 比 29447 个实体少了一点)。当我在较长时间(~1 小时)后检查时,我可以看到所有实体都在那里(getCurrentKeys
returns 预期的 29447 个实体)。
用于读取实体数量的代码如下:
const runQuery = (query) => {
return new Promise((resolve, reject) => {
datastore.runQuery(query)
.then(results => {
const entities = results[0];
resolve(entities);
})
.catch(e => reject(e));
});
};
const getCurrentKeys = () => {
const query = datastore.createQuery(KIND)
.select('__key__');
return runQuery(query);
};
async function main() {
const currentKeys = await getCurrentKeys();
console.log(`currentKeys: ${currentKeys.length}`);
}
main();
知道会发生什么吗?
提前致谢
经过更多研究,我认为这可能与索引有关。我相信在我 运行 查询时索引的更新速度不够快。实体有很多属性,所以涉及到很多索引。
非祖先查询是最终一致的。需要一段时间才能显示所有行。
这篇文章应该解释更多:
在 Google Cloud DataStore 中插入 29447 个单一种类的实体后,我等待了大约 30 秒,然后检查该特定种类有多少实体。令人惊讶的是,我注意到其中一些丢失了(getCurrentKeys
returns 比 29447 个实体少了一点)。当我在较长时间(~1 小时)后检查时,我可以看到所有实体都在那里(getCurrentKeys
returns 预期的 29447 个实体)。
用于读取实体数量的代码如下:
const runQuery = (query) => {
return new Promise((resolve, reject) => {
datastore.runQuery(query)
.then(results => {
const entities = results[0];
resolve(entities);
})
.catch(e => reject(e));
});
};
const getCurrentKeys = () => {
const query = datastore.createQuery(KIND)
.select('__key__');
return runQuery(query);
};
async function main() {
const currentKeys = await getCurrentKeys();
console.log(`currentKeys: ${currentKeys.length}`);
}
main();
知道会发生什么吗?
提前致谢
经过更多研究,我认为这可能与索引有关。我相信在我 运行 查询时索引的更新速度不够快。实体有很多属性,所以涉及到很多索引。
非祖先查询是最终一致的。需要一段时间才能显示所有行。
这篇文章应该解释更多: