12

我正在寻找适合以通用方式收集实时传感器数据流的可嵌入 Java 库。我计划用它来开发一个“集线器”应用程序,用于报告多个不同的传感器流,在基于 JVM 的服务器上运行(也将为此使用 Clojure)。

它需要具备的关键条件:

  • 各种常见传感器类型/API 的接口。我很高兴自己构建我需要的东西,但如果一些标准的东西开箱即用,那就太好了。
  • 适合“软实时”使用,即相当低的延迟和低开销。
  • 能够在运行时监控和管理流、收集统计数据等。
  • 在合理许可的许可下开源,以便我可以将它与其他代码集成(Apache、EPL、BSD、LGPL 都可以)
  • 一个相当活跃的社区/开发者生态系统

您可以推荐一些适合此个人资料的东西吗?

4

2 回答 2

14

1. 循环数据库(维基百科

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

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

在此处输入图像描述

有 Java 实现——RRD4J

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

更新

忘记提及 Clojure RRD API(示例)。

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

它体积小、速度快且足够可靠,但在 GPLv3 下分发。Perst 提供了几种索引算法:

  1. B树
  2. T-Tree(针对内存数据库进行了优化)
  3. R-Tree(空间索引)
  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. 它可以存储/可视化详细的数据集

在此处输入图像描述

于 2013-02-12T18:28:47.963 回答
2

对于收集传感器数据的实时流,以下可能会有所帮助

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

于 2013-02-12T19:13:04.207 回答