我正在一个会计系统中工作,该系统接收(通过队列)关于可以创建(使用类型),修改和销毁的不同元素的使用事件。我每月可以举办约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。
谢谢。
答案 0 :(得分:0)
有很多方法可以解决这个问题,很难给你一个好的答案。我要做的就是给你一些建议。
如果#2对您来说似乎是一条好路线,您可能希望使用星型模式来存储每日聚合,并可能存储在RDBMS中。您不仅可以使用它来构建工具,而且市场上有许多产品可以很好地与星形/雪花模式数据相连接以进行分析。
听起来像一个有趣的项目!