基于Java的传感器数据收集库

12
我正在寻找一个适合以一般方式收集传感器实时数据流的可嵌入Java库。我计划使用它来开发一个“中心”应用程序,用于汇报多个不同传感器数据流,运行在基于JVM的服务器上(也将为此使用Clojure)。
以下是其需要具备的关键功能:
  • 各种常见传感器类型/ API的接口。我很乐意自己构建所需内容,但如果一些标准内容可以预先准备好就更好了。
  • 适用于“软实时”使用,即延迟和开销相对较低。
  • 能够在运行时监视和管理流、收集统计信息等。
  • 在合理宽松的许可下开源,以便我可以将其与其他代码集成(Apache、EPL、BSD、LGPL都可以)。
  • 一个相当活跃的社区/开发人员生态系统
请问是否有符合此要求的推荐?

为什么不直接使用安卓系统呢? - James Black
我将在JVM上运行 - Android是否提供了在这种情况下可用的库?如果是这样,那可能是一个好答案。 - mikera
你用Java编写代码,但它在Dalvik机器上运行。你可能想看看这个作为起点,并查看你的需求是否会被添加到其中:http://www.opersys.com/downloads/cc-slides/embedded-android/embedded-android-120203.pdf - James Black
2个回答

14

1. 环形数据库(wikipedia

RRDtool(环形数据库工具的缩写)旨在处理时间序列数据,如网络带宽、温度、CPU负载等。数据存储在环形数据库(循环缓冲区)中,因此系统存储占用随时间保持恒定。

这种方法/数据库格式被广泛使用,稳定且足够简单。开箱即用,可以生成漂亮的图形:

enter image description here

这里有一个Java实现 -- RRD4J:

RRD4J是一个高性能的时间序列数据记录和绘图系统,它在Java中实现了RRDTool的功能。它遵循与RRDTool相同的逻辑,并使用相同的数据源、存档类型和定义。采用Apache 2.0许可证的开源软件。

更新

忘了提到还有Clojure RRD API (examples)。

2. 对于一些实时数据的实验,我建议考虑Perst

它很小,速度快,也足够可靠,但是采用GPLv3分发。Perst提供了几种索引算法:

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

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

3. Neo4J关系索引

这种方法产生回报的一个很好的例子是时间序列数据,其中每个发生表示为一次关系读取。

4. Oracle Berkeley DB Java Edition

Oracle Berkeley DB Java Edition是一个开源的、可嵌入的、完全由Java编写的事务性存储引擎。它充分利用Java环境来简化开发和部署。Oracle Berkeley DB Java Edition的架构支持读密集型和写密集型工作负载的高性能和并发性。建议尝试使用RRD4J
1. 它足够简单 2. 它提供了非常好的绘图功能 3. 它有Clojure API 4. 它支持多个后端,包括Oracle Berkeley DB Java Edition 5. 它可以存储/可视化详细数据集

enter image description here


我认为你应该添加http://lmax-exchange.github.com/disruptor,因为他可能需要一些消息传递。 - Adam Gent

2

如果要收集实时传感器数据流,以下内容可能会有所帮助

您是否已经查看了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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接