Пакетная вставка объектов Cloud Datastore при распознавании того же ключа уже существует? - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь создать Cloud Dataflow 2.x (он же Apache Beam) PTransform, чтобы отфильтровать элементы PCollection, которые уже были "видны" ранее.

Основная идея заключается в том, что PTransform получает функцию для вычисления естественного идентификатора («первичный ключ») для каждого из элементов PCollection. Каждый из этих идентификаторов будет использоваться для создания ключа хранилища данных в облаке и хранится в фиктивном виде сущности («таблица»); если вставка завершается неудачно из-за ошибки дублирования ключа, я знаю, что уже видел соответствующий естественный идентификатор и, следовательно, тот же элемент PCollection.

Я предполагаю, что лучший способ реализовать это - использовать Bundles в DoFn и отправлять пакетные запросы в Datastore с помощью моего метода @FinishBundle.

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

Если я использую нетранзакционные вставки, гарантирую ли я, что при одновременной вставке одного и того же ключа произойдет сбой хотя бы одного из них?

В противном случае, какие еще варианты у меня есть? Я бы предпочел не использовать транзакции только с одной мутацией, а объединять несколько мутаций вместе.

Я использую API datastore-v1-proto-client / datastore-v1-protos (он же API REST Datastore v1), а не новый google-cloud-datastore API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...