我应该使用键/值数据库来存储我的API日志吗?

时间:2014-11-19 17:03:49

标签: java database logging nosql

我从API中获取了大量日志。我分析这些日志以获取有趣的信息,比如本月API的用户数量或他们的活动类型。

我所做的所有分析都取决于一段时间。 所以时间戳对我来说非常重要。

实际上,实际上我在时间戳上使用了索引。问题是时间戳仍在继续。

我的问题是哪个数据库更适合我的用例?

我听说过键/值数据库,使用时间戳作为键是否有趣?

感谢。

1 个答案:

答案 0 :(得分:1)

这是一篇来自IBM的两年前的文章,它更多地讨论了SQL实现,但是当你执行NoSQL实现时,它也可能需要记住:

当然,您的应用程序会有所不同,我不确定您的时间戳的粒度,但可以在同一时间戳上记录两个项目。

您可能最好为您的键值存储创建一些其他形式的唯一键算法,每个时间戳添加一些序列化。所以时间戳的第一项是“.1”,第二项是“.2”,等等。所以你有一些timestamp.serialid格式。

我的另一个想法是:您是否合并来自多个应用程序/进程或计算机的API日志文件?您可以使用某种elementid.appid.timestamp.serialid来制作唯一键。

这一切都取决于你的用例,所以我不能肯定地说。我也想知道你想要在事后读取/分析方面对你的键值存储做什么,因为这可能会大大改变你的NoSQL解决方案。如果你打算进行大量的日志分析,那么,是的,有一个很好的理由把它放到NoSQL数据库中,特别是如果你想做一些像快速分析数据,然后推回一些较旧的项目进入磁盘存储。

至于数据库,显然每个供应商都会坚持使用他们的产品;但是选择最适合工作的工具。最好先购买,然后根据具体设置进行测试。我来自Aerospike,所以我显然偏向于它作为Key-Value商店:http://www.aerospike.com/


今天和一个非常聪明的人谈过,他还建议你可能想要使用“自日期时间'x'”以来的“毫秒”作为主键。根据您记录的内容,可能仍有可能与主要密钥发生冲突。

因此,另一个建议是获取该主键的所有条目(例如:该毫秒的所有日志条目)并将它们加载到同一记录中,在一种“桶”中。您需要应用程序逻辑来解析同一主键下的多个日志条目,但这是另一种剥离猫的方法。