Как мне атаковать большой набор записей GroupBy в тяжелом стеке JavaScript?

В настоящее время я использую Node.js и Firebase в проекте, и мне нравятся оба. Моя задача заключается в том, что мне нужно хранить миллионы строк заказов на продажу, которые будут выглядеть примерно так:

{ companyKey: 'xxx', orderKey : 'xxx', rowKey : 'xxx', itemKey : 'xxx', orderQty: '5', orderDate: '12/02/2015' }

Я хотел бы запросить эти записи, как приведенный ниже псевдокод:

Select sum(orderQty) from mydb where companyKey = 'xxx' and itemKey = 'xxx' groupby orderDate

В соответствии с различными причинами, такими как группировка количества Firebase по, groupby в целом может быть крепким орешком для трескаться. Я сделал это до использования Oracle Materialized Views, но хотел бы использовать какой-то сервис, который просто выполняет всю эту работу за меня, чтобы я мог CRUD эти заказы на продажу, не беспокоясь об обслуживании агрегации. Я прочитал в другом сообщении stackoverflow, что Keen.io может быть хорошим решением этой проблемы.

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

Пара моментов, которые я рассматриваю. Буду обновлять по мере появления:

1) Кажется, мне придется исключить Keen.io из списка. Это 125 долларов за 1 миллион строк. Мне не нужна вся мощь Keen.io, только агрегация по дням.

2) Переход на Sequelize + PostGreSQL кажется достойным компромиссом. Я все еще могу использовать JavaScript, ORM, чтобы облегчить боль, а хостинг PostGreSQL обычно дешевый.


person Will Lovett    schedule 27.02.2016    source источник
comment
Я думаю, что это слишком общий вопрос? В основном вопрос; каков наилучший вариант для поддержки запросов агрегации, таких как X, в большой динамической базе данных, доступной из node.js, и, о, также имеет хороший API с низким импедансом?   -  person thespinkus    schedule 27.02.2016
comment
Этот запрос довольно прост, но вам нужно изменить свою структуру, чтобы компенсировать часть «и» запроса Firebase. Каковы ожидаемые результаты «groupby»? Вам нужна аналитика результирующего запроса (например, подсчет по дате?) вместо результатов запроса? Или оба?   -  person Jay    schedule 27.02.2016
comment
Похоже, что цена обновления составит 10 долларов за 1 млн строк: Keen.io/pricing.   -  person jandwiches    schedule 02.03.2017


Ответы (1)


Похоже, вы хотите показать тенденцию продаж товара с течением времени. Это очень хорошо подходит для платформы данных о событиях, потому что отображение трендов во времени действительно встроено в язык запросов. В Keen IO идея «группировки по времени» вместо этого выражается в виде концепции «временных рамок» (например, «предыдущие_7_дней») и «интервала» (например, ежедневно).

Вот как это сделать с помощью простого запроса sum в Keen:

var sum = new Keen.Query("sum", {
  event_collection: "sales",
  target_property: "orderQty",
  timeframe: "previous_12_weeks",
  interval: "weekly",
  filters: [
    {
      property_name: "companyKey",
      operator: "eq",
      property_value: "xxx"
    },
    {
      property_name: "itemKey",
      operator: "eq",
      property_value: "yyy"
    }
  ]
});

На самом деле вы можете рассчитать сумму для ВСЕХ ваших компаний и продуктов в одном запросе, используя group_by.

var sum = new Keen.Query("sum", {
  event_collection: "sales",
  target_property: "orderQty",
  timeframe: "previous_12_weeks",
  interval: "weekly",
  group_by: ["companyKey", "itemKey"]
});

Keen недавно обновил свои цены. В зависимости от частоты запросов, что-то вроде этого будет довольно легким, в 10 долларов в месяц, если у вас есть миллионы новых транзакций в месяц.

person Michelle Wetzler    schedule 14.06.2017