我目前在一个项目中使用 Node.js 和 Firebase,我都喜欢。我的挑战是我需要存储数百万个销售订单行,这些行看起来像这样:
{ companyKey: 'xxx',
orderKey : 'xxx',
行键:'xxx',
itemKey : 'xxx',
orderQty: '5',
订单日期:'12/02/2015'
}
我想像下面的伪代码一样查询这些记录:
从 mydb 中选择 sum(orderQty) where companyKey = 'xxx' and itemKey = 'xxx' groupby orderDate
根据Firebase count group by等各种原因, groupby 通常是一个棘手的问题。我在使用 Oracle 实体化 View 之前已经完成了它,但我想使用某种服务来为我完成所有这些后端工作,这样我就可以 CRUD 那些销售订单,而不必担心聚合维护。我在另一篇 stackoverflow 帖子中读到,Keen.io 可能是解决这个问题的好方法。
如果互联网专家使用 JavaScript 繁重的堆栈,并且他们希望外部服务每天为他们进行聚合,他们将如何解决这个问题?
我正在考虑的几点。我会在他们出现时更新:
1) 看来我可能不得不将 Keen.io 从列表中删除。 100 万行的价格为 125 美元。我不需要 Keen.io 提供的所有功能,只需要按天聚合。
2) 使用 Sequelize + PostGreSQL 似乎是一个不错的妥协。我仍然可以使用 JavaScript,一种 ORM 来减轻痛苦,而且 PostGreSQL 托管通常很便宜。
最佳答案
听起来您想要显示某项商品随时间的销售趋势。这非常适合事件数据平台,因为显示随时间变化的趋势对于查询语言来说确实是原生的。在 Keen IO 中,“按时间分组”的想法被表达为“时间范围”(例如 previous_7_days)和“间隔”(例如每天)的概念。
这是使用简单的 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 美元。
关于node.js - 我应该如何攻击 JavaScript 重堆栈中的大型 GroupBy 记录集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35664322/