在 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();

知道会发生什么吗?

提前致谢

经过更多研究,我认为这可能与索引有关。我相信在我 运行 查询时索引的更新速度不够快。实体有很多属性,所以涉及到很多索引。

非祖先查询是最终一致的。需要一段时间才能显示所有行。

这篇文章应该解释更多:

https://cloud.google.com/datastore/docs/articles/balancing-strong-and-eventual-consistency-with-google-cloud-datastore/