如何在内存统计数据库中实现Java/Scala?

如何在内存统计数据库中实现Java/Scala?,java,sql,statistics,embedded-database,Java,Sql,Statistics,Embedded Database,我需要的是聚合web应用程序服务器的实时统计数据。 例如: 已完成多少个内容类型为X的请求 处理Y类型的请求需要多长时间 等等 为了获得最佳性能,这些数据必须完全存储在内存中,而不是文件中。它不会记录每个请求,而是只存储各个方面的计数器 我知道的最简单的方法是将值存储在类似SQL的表中,并执行类似SQL的查询。这样做的好处是,索引可以在没有开发工作的情况下从书架上取下。我想一些嵌入式Java数据库可以完成这项工作 另一种方法是为每个“索引列”实现集合(比如列表)和哈希表。通过这种方式,所有这

我需要的是聚合web应用程序服务器的实时统计数据。 例如:

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

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

我知道的最简单的方法是将值存储在类似SQL的表中,并执行类似SQL的查询。这样做的好处是,索引可以在没有开发工作的情况下从书架上取下。我想一些嵌入式Java数据库可以完成这项工作

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

所以我的问题是,您认为首选哪种方式,以及是否有其他方式可以轻松快速地实现此功能

谢谢。

我会选择,我对它有非常积极的体验,性能也很好


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

我可以想象,对于需要收集的每种类型的信息,您只需要一次收集。为了提高性能,请简化我将用于投影Ashmap的代码。e、 g

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

tobjectnthashmap contentTypeCount
=新的tobjectnthashmap();
contentTypeCount.increment(contentType);
处理Y类型的请求需要多长时间

TObjectLongHashMap内容类型时间
=新的TObjectLongHashMap();
contentTypeTime.adjustValue(processType,processTime);
我不明白你如何通过使用你提到的其他方法使它变得更短/更简单/更快

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

我还注意到这是Scala的统计库

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


可以从HTTP REST API访问数据。

我刚刚发现了RRDtool。我想知道这是不是一种更可取的方式,而不是重新发明轮子。还有一个名为rrd4j()的Java实现
TObjectIntHashMap<ContentType> contentTypeCount 
     = new TObjectIntHashMap<ContentType>();

contentTypeCount.increment(contentType); 
TObjectLongHashMap<ProcessType> contentTypeTime 
    = new TObjectLongHashMap<ProcessType>();

contentTypeTime.adjustValue(processType, processTime);