Эффективно ли я собираю данные из Aerospike?

В Aerospike у меня есть набор ac_1_2015-06-13_15, который содержит информацию о расходах учетной записи 1 на 13 июня 2015 г., разбитую на 15-минутные сегменты, то есть каждая запись представляет собой 15-минутный сегмент в течение дня. Так как в часе 4 отрезка по 15 минут, а в сутках 24 часа, то имеется 96 записей. Каждая запись имеет один бин spend.

Чтобы рассчитать общие расходы за день, я использовал AerospikeClient.scanAll(), суммируя все значения расходов:

totalSpend += record.getDouble("spend");

Это занимает 351 миллисекунду. Есть ли более эффективный способ расчета суммы или это все?


person SBel    schedule 13.06.2015    source источник


Ответы (1)


Как правило, при использовании хранилищ пар "ключ-значение" такие агрегации желательно выполнять на месте для одной записи, если это возможно, и свести к минимуму количество записей, используемых для моделирования информации.

Если ваш набор описывает один день, есть ли причина, по которой учетная запись не является отдельной записью? у него может быть бин для каждого часа, при этом тип данных бина представляет собой список или карту, содержащую сегменты. Другие ячейки могут содержать агрегированные данные.

Я также был бы осторожен с набором в день. Существует ограничение 1023 набора на пространство имен. Есть ли причина, по которой день не является целым числом или строкой с построенным над ним вторичным индексом? Таким образом, вы можете запросить данные за день. Или, если это значение unix-timestamp (вторичный индекс над целым числом), вы можете запросить точные диапазоны времени. Запись за день со всеми данными с точностью до минуты (при условии ограничений) имела бы для меня больше смысла.

person Ronen Botzer    schedule 14.06.2015