Разница между com.google.datastore.v1 и com.google.cloud.datastore / отсутствует параметр для отключения индекса
В настоящее время я создаю задание Google Cloud Dataflow, которое анализирует XML-файлы и сохраняет записи с помощью Google Datastore, но различные библиотеки Java кажутся очень запутанными.
Сначала я нашел com.google.datastore.v1, который отлично работает с Dataflow, но позже я понял, что опция исключения полей из индексации отсутствует. (Большинство моих полей не нуждаются в индексе и никогда не будут использоваться в запросе.)
Затем я обнаружил com.google.cloud.datastore, в котором есть метод с именем setExcludeFromIndexes, чтобы добиться именно того, что я искал, но Dataflow не может сохранять объекты, созданные с помощью этой библиотеки.
Является ли одна из библиотек более новой или какая разница вообще? И есть ли способ отключить индексы для отдельных полей с помощью библиотеки v1?
3 ответа
v1-библиотека - это тонкий слой, который предоставляет сгенерированные исходные коды и некоторые вспомогательные функции.
google-cloud-datastore - это оболочка, которая использует v1-библиотеку, чтобы быть более удобной для пользователя.
Чтобы позволить различным клиентским библиотекам Datastore взаимодействовать с Dataflow, мы используем библиотеку v1, поскольку она является наименее распространенным знаменателем.
В идеале вы должны использовать библиотеку google-cloud-datastore, но в зависимости от версий v1-library и google-cloud-datastore могут иметь конфликтующие зависимости (в частности, protobuf 3.0.0 v 3.0.0-beta-1), в этом случае Вам нужно либо выбрать совместимые версии, либо напрямую использовать библиотеку v1.
Вспомогательных функций библиотеки v1 может быть недостаточно для исключения полей из индексации, но вы всегда можете создать своих собственных помощников, напрямую работая с прототипными сообщениями. В этом конкретном случае вы будете создавать свое собственное значение и явно устанавливать exclude_from_indexes.
Эти две библиотеки в настоящее время несовместимы друг с другом (вы не можете конвертировать между двумя представлениями данных), но вы можете исключить значения из индексов в com.google.datastore.v1
:
Value value = Value.newBuilder()
.setStringValue("foo")
.setExcludeFromIndexes(true)
.build();
Я столкнулся с той же проблемой. Я обновил версию хранилища данных в pom.xml до последней версии, и проблема была решена.
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-datastore</artifactId>
<version>1.106.0</version>
</dependency>