我正在设计一个应该存储事件的系统。每个事件都有三个基本属性:
1. 时间戳(64 位)
2. 密钥(它是什么)。
3. value(事件的实际值)。
事件键通常是字符串,事件值几乎总是数字。
到目前为止很简单,但是,这里有点泥泞。事件系统应该允许向下钻取到非常高的级别。这意味着什么最好用一个例子来说明:
注意:为简洁起见,省略了时间戳。
key: hits // 可能是每小时,也可能是最后一秒,key 是特定于应用程序的,由用户决定他的应用程序多久向我们报告此事件。 价值:12000 // 钻取从这里开始。 关键:美国 价值:5000 键:State1 价值:2000 键:City1 价值:500 关键:英国 价值:5000 键:StateN 价值:20 // 到任意级别。
所以,正如你在上面看到的,这个值实际上变成了一棵树。有人可能会说,为什么不独立存储每个 k/v 并维护一个“父键”,由于写入增加(最终,当查找事件时,读取负载),这将是低效的。在一次操作中将它们写出并一次读回整个对象会更有效率。
我想知道如何最好地设计这个。这些对象本质上是一个 C++ 类(尽管为了互操作性,它实际上是一个序列化框架 ala 协议缓冲区/节俭)。
事件系统与应用程序无关,但我想要一个很好的 API 来为客户端提供直观的。
你以前设计过这样的东西吗?想法?你认为最好的方法是什么?
先感谢您。
PS:预计每天会有几百万个事件,我们将根据数据构建图表。