以下是其需要具备的关键功能:
- 各种常见传感器类型/ API的接口。我很乐意自己构建所需内容,但如果一些标准内容可以预先准备好就更好了。
- 适用于“软实时”使用,即延迟和开销相对较低。
- 能够在运行时监视和管理流、收集统计信息等。
- 在合理宽松的许可下开源,以便我可以将其与其他代码集成(Apache、EPL、BSD、LGPL都可以)。
- 一个相当活跃的社区/开发人员生态系统
1. 环形数据库(wikipedia)
RRDtool(环形数据库工具的缩写)旨在处理时间序列数据,如网络带宽、温度、CPU负载等。数据存储在环形数据库(循环缓冲区)中,因此系统存储占用随时间保持恒定。
这种方法/数据库格式被广泛使用,稳定且足够简单。开箱即用,可以生成漂亮的图形:
这里有一个Java实现 -- RRD4J:
RRD4J是一个高性能的时间序列数据记录和绘图系统,它在Java中实现了RRDTool的功能。它遵循与RRDTool相同的逻辑,并使用相同的数据源、存档类型和定义。采用Apache 2.0许可证的开源软件。
更新
忘了提到还有Clojure RRD API (examples)。
2. 对于一些实时数据的实验,我建议考虑Perst
它很小,速度快,也足够可靠,但是采用GPLv3分发。Perst提供了几种索引算法:
最后一个非常适合您的需求。
这种方法产生回报的一个很好的例子是时间序列数据,其中每个发生表示为一次关系读取。
4. Oracle Berkeley DB Java Edition
Oracle Berkeley DB Java Edition是一个开源的、可嵌入的、完全由Java编写的事务性存储引擎。它充分利用Java环境来简化开发和部署。Oracle Berkeley DB Java Edition的架构支持读密集型和写密集型工作负载的高性能和并发性。建议尝试使用RRD4J:如果要收集实时传感器数据流,以下内容可能会有所帮助
您是否已经查看了LeJos API。这里是http://lejos.sourceforge.net/nxt/nxj/api/index.html
此外,值得检查的是Oracle Java ME嵌入式和他们正在解决的目标市场http://www.unitask.com/oracledaily/2012/10/04/at-the-java-demogrounds-oracle-java-me-embedded-enables-the-internet-of-things/
可以从http://www.oracle.com/technetwork/java/embedded/downloads/javame/index.html下载
对于存储时间序列数据,没有比cassandra更好的选择了http://cassandra.apache.org/ ,关于为什么选择cassandra,请参考http://www.datastax.com/why-cassandra
要从Java中访问Cassandra,请参考https://github.com/jmctee/Cassandra-Client-Tutorial。这非常有帮助,将时间序列概念应用于cassandra数据库,请参考
http://www.datastax.com/wp-content/uploads/2012/08/C2012-ColumnsandEnoughTime-JohnAkred.pdf