Отсутствующие объекты после вставки в Google Cloud DataStore

После вставки 29447 сущностей одного типа в Google Cloud DataStore я жду около 30 секунд и проверяю, сколько сущностей существует для этого конкретного типа. Удивительно то, что я заметил, что некоторые из них отсутствуют (getCurrentKeys возвращает чуть меньше 29447 сущностей). Когда я проверяю через более длительный период времени (~ 1 час), я вижу, что все сущности присутствуют (getCurrentKeys возвращает ожидаемые 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();

Есть идеи о том, что может происходить?

заранее спасибо


person Alex    schedule 08.07.2017    source источник


Ответы (2)


Запросы, не являющиеся предками, в конечном итоге согласованы. Пройдет некоторое время, прежде чем появятся все строки.

Эта статья должна объяснить больше:

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

person Joshua Melcon    schedule 09.07.2017
comment
Сначала ознакомьтесь с этим: ответ и как ответить - person ankit suthar; 09.07.2017
comment
Спасибо, Джошуа! Мне не хватало этого обновления индексных таблиц выполняются асинхронно. - person Alex; 09.07.2017

После небольшого исследования, я думаю, это может быть связано с индексами. Я считаю, что к моменту выполнения запроса индексы обновляются недостаточно быстро. У сущностей много свойств, поэтому задействовано много индексов.

person Alex    schedule 08.07.2017