会计系统中使用信息的每月汇总

时间:2013-04-02 22:23:10

标签: mongodb mapreduce aggregation-framework

我正在一个会计系统中工作,该系统接收(通过队列)关于可以创建(使用类型),修改和销毁的不同元素的使用事件。我每月可以举办约100万次活动。

在月末,系统必须聚合信息以生成包含给定元素使用时间的报告。我相信我也需要每天进行聚合。

一个例子更清楚。这些是我收到的事件:

{event: "create", date: "2013/01/01", element_id: 1, element_type: "L"}
{event: "modify", date: "2013/02/05", element_id: 1, element_type: "XL"}
{event: "modify", date: "2013/02/07", element_id: 1, element_type: "L"}
{event: "destroy", date: "2013/02/08", element_id: 1}

这应该是“二月”的结果:

-- from 2013/02/01 to 2013/02/05 + 2013/02/07 to 2013/02/08
{element: "1", element_type: "L", units: "6 days" }
-- from 2013/02/05 to 2013/02/07
{element: "1", element_type: "XL", units: "2 days" }

我主要担心的是如何跟踪在之前的时间间隔中创建的元素(例如2年前),并且仍然没有以有效的方式销毁。

您是否知道任何可以解决此问题的算法?我一直在考虑地图缩减过程,但我不确定它是否适合(按月过滤,跟踪前几个月创建的元素等)。任何想法都是受欢迎的。

我目前正在使用nodejs和mongodb来存储事件,如果这有帮助,但如果有任何优势,我可以使用java和/或mysql。

谢谢。

1 个答案:

答案 0 :(得分:0)

有很多方法可以解决这个问题,很难给你一个好的答案。我要做的就是给你一些建议。

  1. 就像你已经提到的那样构建mapreduce,或者如果你的数据允许,甚至可以更好地使用新的聚合框架。这是相当数量的数据,因此您可能需要更频繁地聚合。
  2. 更频繁地聚合,每天说,并将此数据存储在新的集合或不同的数据存储中,并使用您的每日计划聚合任务添加到该集合。通过这种方式,您可以在月末对月度数据进行一次简单查询。
  3. 的Hadoop!
  4. 如果#2对您来说似乎是一条好路线,您可能希望使用星型模式来存储每日聚合,并可能存储在RDBMS中。您不仅可以使用它来构建工具,而且市场上有许多产品可以很好地与星形/雪花模式数据相连接以进行分析。

    听起来像一个有趣的项目!