【问题标题】:Data Modelling in cassandra for IOT用于 IOT 的 cassandra 中的数据建模
【发布时间】:2016-10-04 12:59:56
【问题描述】:

我们正在尝试在基于 IoT 的应用程序中使用 Apache Cassandra。我们正计划创建一个设备抽象。任何用户都应该能够定义具有一系列属性的设备。对于每个属性,用户应该能够定义一系列属性,如名称、数据类型、最小值、最大值等

下面给出了一些设备示例

车辆

车辆可以具有以下属性

  1. 速度 [名称:- 速度,数据类型:- 双精度,最小值:- 0,最大值:-300]
  2. 纬度 [名称:- 速度,数据:- 双倍,最小值:- -90,最大值:-90]
  3. 经度[名称:- 经度,数据:- 双精度,最小值:- -180,最大值:- 180]

温度传感器

温度传感器可以有以下属性

  1. 当前温度[名称:- 当前温度,数据类型:- 双精度,最小值:- 0,最大值:-300]
  2. 单位[名称:-单位,数据类型:-字符串]

每个设备都将实时发送数据作为键值对。

例如:- 车辆可以发送以下数据

时间:- 6/4/2016 11:15:15.150,纬度:-1.256,经度:- -180.75,速度:- 50

时间:- 6/4/2016 11:15:16.150,纬度:-1.257,经度:- -181.75,速度:- 51

例如:- 温度传感器可以发送以下数据

时间:- 6/4/2016 11:15:15.150,当前温度:100,单位:华氏度

时间:- 6/4/2016 11:15:16.150,纬度:101,单位:华氏

由于不同设备的属性可能不同,我们对 cassandra 中的表格如何建模感到困惑......想到的一些选项是为设备创建表格,或创建单个表并将值存储在 Map 数据类型中......我们对应该采用哪种方法有点困惑...... 任何建议表示赞赏

【问题讨论】:

  • 鉴于最终用户可以随意定义自己的设备类型,您可能不希望每个设备都有一个表,因为这会导致您根据用户请求按需创建表。
  • 您可以创建一个抽象,比如说一个事物,一个目前在物联网领域流行的术语,它支持用户定义的标签,每个标签都由名称和值组成。每个标签将存储在单独的列中。
  • 您可能想看看我的 IoT 项目,它是一个 IoT/Casandra 项目。 github.com/weaviate
  • 谢谢鲍勃,我会看看然后回来
  • @BobvanLuijt 我查看了您的项目,但无法理解这些值是如何存储的...请您详细说明

标签: cassandra time-series device iot


【解决方案1】:

我认为最好的选择是只创建一个具有通用模式的表来收集时间序列数据。

CQL 示例:

CREATE TABLE timeline (
  device uuid,
  time timeuuid,
  key text,
  value blob,
  …
  PRIMARY KEY ((device, key), time)
);

值可以存储为 blob(自定义序列化)、map数字标量,具体取决于您的应用程序用例和数据访问模式(如何读取/写入/删除以及您是否计划支持更新)。

仅供参考,关于时间序列建模的相关 Datastax 帖子:

【讨论】:

  • 如果 IOT 感应发送 10 个读数/秒会发生什么。一个小时内我们将有 36K 列?这不是不可持续的色谱柱数量吗?
【解决方案2】:

绝对不要为每个设备创建一个表。我想你最终会得到 100s/1000s 的表,而对它们的建模方式控制最小。 Cassandra 不能很好地处理这个问题,因为它需要每个表的内存,这将减少键缓存和行缓存(如果你使用它的话)的可用内存。

map 方法可能是可行的,但是在走这条路之前有一些事情需要考虑:

设备条目会收到频繁更新吗?您将如何更新它? 如果您计划更新地图中的每个元素,则必须单独更新每个元素。这样做的原因是 Cassandra 中集合的覆盖将为每个覆盖创建一个范围墓碑。如果经常覆盖,那么您最终会得到数百万个墓碑,这些墓碑最终可能不会像您希望的那样有效地被压缩掉。这可以通过使用 JSON 类型来避免,并在您的应用程序中处理它。

您还需要考虑如何查询数据,如果您希望用户能够查询地图中的数据,可能会变得更复杂一些。我认为您最好使用一种查询方法而不考虑设备类型,然后在您的应用程序中提取详细信息。然而,这取决于您,并且几乎是您如何构建数据的驱动力。我能给出的最好建议是尽量避免创建过多的表,同时也要警惕让用户对数据结构有很多控制权,因为这很容易做得不好并导致集群出现性能问题。

如果您还没有阅读此博客,请阅读此博客 - 它指出了在使用 Cassandra 时需要正确进行数据模型设计的基本要素。 http://www.datastax.com/dev/blog/basic-rules-of-cassandra-data-modeling

【讨论】:

    【解决方案3】:

    您是否考虑过在 Cassandra 中使用不同的 Collection Data 类型来存储设备之间不同的信息?

    https://docs.datastax.com/en/cql/3.0/cql/cql_using/use_collections_c.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-08
      • 2018-06-14
      • 1970-01-01
      • 2021-01-11
      • 2015-09-13
      • 2016-11-24
      • 2019-09-22
      • 2015-06-04
      相关资源
      最近更新 更多