基于Java的传感器数据收集库
我正在寻找一个可嵌入的Java库,它适用于以通用方式收集传感器数据的实时流 。 我计划用它来开发一个“集线器”应用程序,用于报告在基于JVM的服务器上运行的多个不同的传感器流(也将使用Clojure)。
需要掌握的关键事项:
- 各种常见传感器类型/ API的接口。 我很高兴能够自己构建我需要的东西,但是如果有一些标准的东西是开箱即用的话会很好。
- 适用于“软实时”使用,即相当低的延迟和低开销。
- 能够在运行时监视和管理流,收集统计信息等。
- 在合理许可的许可下开源,以便我可以将它与其他代码集成(Apache,EPL,BSD,LGPL都很好)
- 一个相当活跃的社区/开发者生态系统
是否有适合此配置文件的内容可供您推荐?
1.循环数据库( 维基百科 )
RRDtool(循环数据库工具的首字母缩写)旨在处理时间序列数据,如网络带宽,温度,CPU负载等。数据存储在循环数据库(循环缓冲区)中,因此系统存储空间保持不变随着时间的推移。
这种方法/ DB格式被广泛使用,稳定且简单。 开箱即用它可以生成漂亮的图:
有Java实现 – RRD4J :
RRD4J是一个用于时间序列数据的高性能数据记录和绘图系统,在Java中实现RRDTool的function。 它遵循大部分相同的逻辑,并使用与RRDTool相同的数据源,存档类型和定义。 Apache 2.0许可下的开源。
更新
忘了提一下有Clojure RRD API( 例子 )。
对于一些实时数据的实验,我建议考虑使用Perst
它足够小,快速和可靠,但在GPLv3下分发。 Perst提供了几种索引算法:
- B树
- T-Tree(针对内存数据库进行了优化)
- R树(空间索引)
- Patricia Trie(前缀搜索)
- KD-Tree(多维索引)
- 时间序列(大量固定大小的对象带有时间戳)
最后一个非常适合您的需求。
3. Neo4J与关系索引
这种方法支付股息的一个很好的例子是时间序列数据,其中我们将读数表示为每次出现的关系。
4. Oracle Berkeley DB Java版
Oracle Berkeley DB Java版是一个完全用Java编写的开源,可嵌入,事务存储引擎。 它充分利用Java环境来简化开发和部署。 Oracle Berkeley DB Java版的体系结构支持读密集型和写密集型工作负载的高性能和并发性。
建议
试试RRD4J :
- 这很简单
- 它剂量提供了相当不错的情节
- 它有Clojure API
- 它支持几个后端,包括Oracle Berkeley DB Java版
- 它可以存储/可视化详细的数据集
为了收集传感器数据的实时流,可能会有所帮助
你检查过LeJos API吗? 这http://lejos.sourceforge.net/nxt/nxj/api/index.html
此外,值得检查Oracle Java ME Embedded及其正在解决的目标市场http://www.unitask.com/oracledaily/2012/10/04/at-the-java-demogrounds-oracle-java-me-embedded-使最互联网的,事情/
可以从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 db中应用时间序列概念
http://www.datastax.com/wp-content/uploads/2012/08/C2012-ColumnsandEnoughTime-JohnAkred.pdf