基于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提供了几种索引算法:

  1. B树
  2. T-Tree(针对内存数据库进行了优化)
  3. R树(空间索引)
  4. Patricia Trie(前缀搜索)
  5. KD-Tree(多维索引)
  6. 时间序列(大量固定大小的对象带有时间戳)

最后一个非常适合您的需求。

3. Neo4J与关系索引

这种方法支付股息的一个很好的例子是时间序列数据,其中我们将读数表示为每次出现的关系。

4. Oracle Berkeley DB Java版

Oracle Berkeley DB Java版是一个完全用Java编写的开源,可嵌入,事务存储引擎。 它充分利用Java环境来简化开发和部署。 Oracle Berkeley DB Java版的体系结构支持读密集型和写密集型工作负载的高性能和并发性。

建议

试试RRD4J :

  1. 这很简单
  2. 它剂量提供了相当不错的情节
  3. 它有Clojure API
  4. 它支持几个后端,包括Oracle Berkeley DB Java版
  5. 它可以存储/可视化详细的数据集

在此处输入图像描述

为了收集传感器数据的实时流,可能会有所帮助

你检查过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