Как мне атаковать большой набор записей 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 долларов в месяц, если у вас есть миллионы новых транзакций в месяц.