Aerospike: хранить данные в виде больших двоичных объектов или использовать «контейнеры»?

Мне нужно хранить данные в Aerospike. Этот движок поддерживает «бины» («бин» похож на столбец в строке или поле в записи). С другой стороны, я могу хранить свои записи в виде сериализованных BLOB-объектов. Записи извлекаются из базы данных атомарным способом. То есть мне не нужно извлекать какие-то «столбцы» записи, мне нужна запись целиком.

Возникает вопрос: как наиболее эффективно хранить данные для такого сценария с точки зрения производительности? Держите его несериализованным и используйте «корзины» для описания всех полей записи или сохраните его как сериализованный большой двоичный объект в 1 столбце?


person elgris    schedule 06.08.2014    source источник


Ответы (2)


Если вы уверены, что единственным вариантом использования является получение полной записи, а не отдельных бинов, лучше сохранить значение в виде одного бина. (Внутренне для нескольких бинов потребуется несколько malloc, превышающих предельный размер). Фактически, вы можете установить параметр конфигурации пространства имен «single-bin true», что еще больше оптимизирует ситуацию. Имейте в виду, что после того, как вы установите этот параметр конфигурации, его нельзя будет отменить даже при перезапуске узла. Вы должны очистить диски, если хотите изменить эту конфигурацию. Если пространство имен находится в памяти, очевидно, это ограничение не применяется.

В будущем, если есть возможность доступа к подмножеству бинов, лучше хранить в виде бинов. Так как это сэкономит сетевой ввод-вывод, который будет намного больше, чем накладные расходы malloc.

person sunil    schedule 06.08.2014

Просто добавим, что если вы храните их как BLOB, выбор лучшего механизма сериализации может дополнительно оптимизировать операции с точки зрения сетевого ввода-вывода.

В одном из наших вариантов использования мы перешли с сериализации Java по умолчанию на сериализацию Kryo, и в результате размер данных был уменьшен на одну треть, а время отклика Aerospike на клиенте сократилось наполовину из-за меньшего объема передаваемых данных.

person Ankur Choudhary    schedule 05.05.2015