3

我目前在一个项目中使用 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 物化视图之前已经完成了它,但我想使用某种服务来为我完成所有后端工作,这样我就可以 CRUD 那些销售订单,而不必担心聚合维护。我在另一篇 stackoverflow 帖子中读到 Keen.io 可能是解决这个问题的好方法。

如果互联网专家使用 JavaScript 重堆栈并且他们希望外部服务为他们每天进行聚合,他们将如何解决这个问题?

我正在考虑的几点。我会在他们出现时更新:

1) 看来我可能不得不将 Keen.io 从列表中删除。100 万行需要 125 美元。我不需要 Keen.io 提供的所有功能,只需要按天聚合。

2) 使用 Sequelize + PostGreSQL 似乎是一个不错的折衷方案。我仍然可以使用 JavaScript,一种 ORM 来减轻痛苦,而且 PostGreSQL 托管通常很便宜。

4

1 回答 1

0

听起来您想显示某件商品随时间推移的销售趋势。这非常适合事件数据平台,因为随着时间的推移显示趋势实际上是查询语言的本机。在 Keen IO 中,“按时间分组”的概念被表达为“时间范围”(例如 previous_7_days)和“间隔”(例如每天)的概念。

以下是在 Keen中使用简单sum查询运行它的方法:

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 美元。

于 2017-06-14T22:36:16.380 回答