Как мне атаковать большой набор записей 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 count group by, groupby в целом может быть крепким орешком. Я делал это до использования Oracle Materialized Views, но хотел бы использовать какой-то сервис, который просто выполняет всю эту бэкэнд-работу за меня, чтобы я мог CRUD эти заказы на продажу, не беспокоясь о поддержке агрегации. В другом сообщении stackru я прочитал, что Keen.io может быть хорошим подходом к этой проблеме.

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

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

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

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

1 ответ

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

Вот как вы можете выполнить это с простым запросом суммы в 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"]
});

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

Другие вопросы по тегам