为事件记录系统设计(递归)日志对象

时间:2011-01-17 11:51:49

标签: c++ oop logging graphing

我正在设计一个应该存储事件的系统。每个事件都有三个基本属性:
1.时间戳(64位)
钥匙(它是什么)。
3. value(事件的实际值)。

事件键通常是字符串,事件值几乎总是数字。

到目前为止简单,但是,这里有点混乱。事件系统应该允许向下钻取到非常高的水平。这意味着最好用一个例子说明:

注意:为了简洁而省略时间戳。

key: hits // might be per hour, might be in the last second, the key is application specific, its up to the user to figure out how often his application reports this event to us.
value: 12000
 // and here the drilldown starts.
 key: US
 value: 5000
  key: State1
   value: 2000
    key: City1
    value: 500
 key: UK
 value: 5000
  key: StateN
   value: 20
 // to an arbitrary level.

因此,正如您在上面所看到的,该值实际上变成了一棵树。 有人可能会说,为什么不独立存储每个k / v并保持“父键”,由于写入增加(最终查找事件时,读取负载),这将是低效的。在一次操作中将它们写出来会更有效率,并且一次性读回整个对象。

我想知道如何最好地设计它。这些对象本质上是一个C ++类(虽然,为了互操作性,它实际上是一个序列化框架ala协议缓冲区/ thrift)。

事件系统与应用程序无关,但我想要一个很好的API来为客户提供直观的。

你以前设计过这样的东西吗?思考?您认为最好的方法是什么?

提前谢谢。

P.S:预计每天会有几百万个事件,我们将根据数据构建图表。

2 个答案:

答案 0 :(得分:0)

您可以扩展日志文件定义以提供“组”或“包”类型的日志标记吗?

例如:

  

组:美国钥匙:   状态1
  价值:7000
  关键:State2
   价值:65191

     

组:英国......

这样你就可以解决每个群体的解析......如果这就是你要找的......

答案 1 :(得分:0)

想到的一个想法也是为您的条目提供第四个属性:父日志条目ID。使用像ActiveRecord这样的ORM,您就可以形成一棵自然树。例如:

class LogEntry < ActiveRecord::Base
    has_one :parent_log_entry
    has_many :log_entries
end

(这肯定不正确,但你会得到这个想法)。

ActiveRecord方案在各种语言中有各种各样的实现,因此它们是美妙的语言(和数据库)不可知。