2017-01-04 3 views
4

В настоящее время я создаю задание Google Cloud Dataflow, которое анализирует XML-файлы и сохраняет записи с помощью Google Datastore, разные библиотеки Java, похоже, очень запутанны.Разница между com.google.datastore.v1 и com.google.cloud.datastore/Отсутствует опция для отключения индекса

Сначала я нашел com.google.datastore.v1, который отлично работает с Dataflow, но позже я понял, что опция исключения полей от индексации отсутствует. (Большинство моих полей не нуждаются в индексе и никогда не будут использоваться в запросе.)

Затем я нашел com.google.cloud.datastore, у которого есть метод с именем «setExcludeFromIndexes», чтобы достичь именно того, что я искал for, но Dataflow не может сохранять объекты, сгенерированные с использованием этой библиотеки.

Является ли одна из библиотек более новой или какая разница вообще? И есть ли способ отключить индексы для отдельных полей, используя v1-библиотеку?

ответ

4

v1-library представляет собой тонкий слой, который обеспечивает генерироваться прото источников и некоторых вспомогательных функций.
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-library.

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

3

Эти две библиотеки в настоящее время не совместимы друг с другом (вы не можете преобразовать между двумя представлениями данных), но вы можете исключить значения из индексов в com.google.datastore.v1:

Value value = Value.newBuilder() 
    .setStringValue("foo") 
    .setExcludeFromIndexes(true) 
    .build();