Использование Externalizable в Apache Ignite - PullRequest
0 голосов
/ 05 июня 2018

У меня 4 сомнения,

  1. Мои классы моделей доступны для внешнего использования.Тем не менее их можно запросить с помощью SQLFieldsQuery на узле сервера без каких-либо проблем, верно?

  2. Невозможно запросить выводимые элементы из удаленного клиентского узла, верно?Есть ли способ сделать это на клиенте?

  3. Влияет ли использование внешнего вида на кластеризацию данных между узлами каким-либо образом?

  4. Существуют ли другие ограничения, связанные с использованием внешнего интерфейса, или какие-либо проблемы с производительностью?

1 Ответ

0 голосов
/ 05 июня 2018
  1. Да, вы все еще можете запрашивать ваши объекты.
  2. Вы можете запрашивать его как с клиента, так и с сервера.
  3. AffinityFunction использует ключ для вычисления хеша и получения правильныхраздел.Таким образом, результат зависит от реализаций writeExternal / readExternal, а это означает, что распределение ключей может быть изменено между разделами.
  4. Да, использовать Externalizable всегда плохая идея.

Прежде всего Ignite будет использовать OptimizedMarshaller, который медленнее и производит объекты большего размера, чем BinaryMarshaller, который используется по умолчанию.

Во-вторых, Ignite on SQLFieldsQuery читает только определенные поля из представления двоичного объекта.В случае Externalizable он должен десериализовать весь объект, чтобы прочитать его поля.Таким образом, такой выбор отрицательно сказывается на производительности.

Вы можете дополнительно использовать интерфейс Binarylizable .В этом случае будет использоваться BinaryMarshaller.

...