1

我需要汇总 Web 应用程序服务器的实时统计信息。例如:

  • 已完成多少内容类型 X 的请求
  • 处理类型Y的请求需要多长时间

等等。

为了获得最佳性能,该数据必须完全位于内存中,而不是文件中。它不会记录每个请求,而是仅存储各个方面的计数器。

我知道的最简单的方法是将值存储在类似 SQL 的表中并执行类似 SQL 的查询。好处是索引是现成的,无需开发工作。我想像Apache Derby这样的嵌入式 Java 数据库可以完成这项工作。

另一种方法是为每个“索引列”实现集合(比如列表)和哈希表。这样,这一切都是用 Java/Scala 集合 API 完成的,但实际上我必须自己实现索引机制,测试它,维护它等等。

所以我的问题是您认为哪种方式更受欢迎,是否还有其他方法可以轻松快速地实现此功能?

谢谢。

4

3 回答 3

3

我会选择H2 数据库,我对它有非常积极的体验,性能也很棒。

您确定 SQL 数据库非常适合您的需求吗?您是否查看过javamelody,看看它是否适合您的需求,或者如果它不适合您,请查看JRobin的滚动数据库实现。

于 2010-12-14T11:46:02.103 回答
0

我想你需要收集的每种类型的信息只需要一个集合。为了提高性能,简化代码我会使用 TObjectIntHashMap。例如

已完成多少内容类型 X 的请求

TObjectIntHashMap<ContentType> contentTypeCount 
     = new TObjectIntHashMap<ContentType>();

contentTypeCount.increment(contentType); 

处理类型Y的请求需要多长时间

TObjectLongHashMap<ProcessType> contentTypeTime 
    = new TObjectLongHashMap<ProcessType>();

contentTypeTime.adjustValue(processType, processTime);

我看不出如何通过使用您提到的其他方法使其更短/更简单/更快。

在我的机器上执行增量(键)的平均时间需要 15 ns(十亿分之一秒)

于 2010-12-14T11:47:42.400 回答
0

我还注意到Twitter Ostrich是 Scala 的统计库。

它包含计数器、仪表和计时表。

可从 HTTP REST API 访问数据。

于 2010-12-15T08:44:45.470 回答