Потребление памяти в Apache Ignite - BinaryObject против конкретного класса против SQL - PullRequest
0 голосов
/ 03 января 2019

Мне интересно, как сохранить данные в Ignite.Насколько я понимаю, есть три метода:

  1. Использование сетки данных с BinaryObject в качестве значения - главное преимущество в том, что объект может быть динамическим.
  2. Использование сетки данных с бетономclass (например, Employee) в качестве значения.
  3. Использование интерфейса SQL и использование предопределенных схем.

Знаете ли вы, есть ли какие-либо различия с точки зрения потребления памяти между этими методами?Я подозреваю, что, по крайней мере, при использовании BinaryObject система должна сохранять ключи (некоторое сериализованное представление), поэтому для этого может потребоваться больше памяти, чем для других методов.

Какой метод является наиболее экономичным?

Спасибо!Gal

1 Ответ

0 голосов
/ 03 января 2019

Нет разницы между этими методами с точки зрения занимаемого пространства.Любой из упомянутых подходов можно использовать для доступа к одним и тем же данным, поскольку все они работают в формате BinaryObject.Но они отличаются в других отношениях.

При использовании классов POJO сериализация и десериализация в двоичный формат происходит при каждом доступе к данным или их модификации.Этот метод приводит к более высокой загрузке процессора и кучи памяти.Обратите внимание, что сохраненная память остается прежней, но занимаемая площадь увеличивается.

Подход BinaryObject более эффективен с точки зрения производительности, поскольку не требует сериализации.Интерфейс BinaryObject работает напрямую с сериализованным представлением.

SQL также работает с BinaryObjects без десериализации, поэтому между подходами 1 и 3 нет большой разницы. SQL имеет несколько моментов, которые следует учитывать, хотя.См. https://apacheignite -sql.readme.io / docs / performance-and-debugging

...