Хранилище данных для агрегаций

Какое хранилище данных является предпочтительным для быстрой агрегации данных? У меня есть данные, которые я регулярно извлекаю из других систем, и хранилище данных должно поддерживать такие запросы, как:

  • Каково количество транзакций, совершенных пользователем за определенный период времени.
  • Какова общая сумма успешных транзакций, совершенных пользователем за определенный период времени.
  • Запросы должны поддерживать конструкции SQL, такие как группировка, подсчет, суммирование и т. д. для большого набора данных.

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

Я изучил elasticsearch, но запросы elasticsearch с агрегированием занимают больше 200 мс для тех данных, которые у меня есть.

Есть ли другие альтернативы, тоже сейчас присматриваюсь к Aerospike. Может ли кто-нибудь пролить свет на то, как агрегаты аэрошпилей работают в этом сценарии?


person Abhiram    schedule 11.02.2016    source источник


Ответы (1)


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

Ваши запросы 1 и 2 можно выполнить, написав агрегированную UDF на основе запроса вторичного индекса для идентификатора пользователя, как указано выше.

Мне не очень понятны ваши 3 вопроса. Aerospike не поддерживает группировку, суммирование, подсчет и т. д. в качестве нативных запросов. Но вы всегда можете написать агрегирующую UDF для достижения этой цели. http://www.aerospike.com/docs/guide/aggregation.html

person sunil    schedule 20.02.2016
comment
Метод aerospike.Query.apply клиента Aerospike Python имеет пример GROUP BY HAVING в качестве потока UDF. - person Ronen Botzer; 26.05.2016