通常查询数据库或日志文件的正常运行时间信息或每个给定时间间隔的请求数。
随着您收集越来越多的数据,SQL查询或日志爬网变得越来越慢(想象一下1000万个表行/日志行)。
典型问题:
我想使用一些键值存储:许多具有不同自动过期的存储桶 - 所以我们可以查看例如10分钟/ 1小时/ 1天水桶并在那里总结所有项目并自豪地说“在最后10分钟我们处理了10 ^ 6个请求”。
我确信MongoDB或Redis在存储桶中提供时间到期 - 我只是有点担心实现是否会直截了当。
你会如何解决这个问题?你知道更好的工具吗?
(我们的项目是用java和python编写的)
答案 0 :(得分:0)
我建议采用不同的概念方法......
让我们假设您有一个记录请求的日志表。以下是我将如何解决报告日志数据的问题:
全局的想法是,日志数据一旦完成就是静态的。您可以对数据运行一次聚合,它将永远不会更改。那为什么每次都是实时的呢?
您希望将实时数据设置得非常小而且快速。较旧的数据要么对已知聚合进行快速查找,要么处理时间更长。
答案 1 :(得分:0)
CouchDB二级索引/视图在O(log n) time中公开您的数据,并且无需实现和交互,因为整个事情都位于RESTful HTTP API之后。看看:
_count
reduce函数将其减少为计数。startkey=[timestamp for X days ago]
查询,您可以只计算自那时起的日志条目。reduce=false
,您可以自行返回日志条目,并按创建日期键入。_stats
)来获取有关日志的统计信息。CouchDB具有Java和Python的客户端库,但最终只是一个RESTful HTTP API,所以任何HTTP库都应该这样做。
答案 2 :(得分:0)
您可以使用RDDTool。 http://oss.oetiker.ch/rrdtool/ IT是一个非常有用的库,用于记录时间序列数据并使用它们创建图形。