我在一个会计系统中工作,该系统接收(通过队列)关于可以创建(使用类型)、修改和销毁的不同元素的使用事件。我每个月可以有大约 1000000 个事件。
在月底,系统必须汇总信息以生成包含给定元素已使用次数的报告。我确信我还需要执行每日聚合。
举个例子就更清楚了。这些是我收到的事件类型:
{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 年前)中创建但仍未以有效方式销毁的元素。
你知道任何可以解决这个问题的算法吗?我一直在考虑 map-reduce 过程,但我不确定它如何适合(按月过滤,跟踪前几个月创建的元素等)。欢迎任何想法。
如果有帮助,我目前正在使用 nodejs 和 mongodb 来存储事件,但如果这有任何优势,我可以使用 java 和/或 mysql。
谢谢你。