卡桑德拉数据模型混乱

时间:2017-08-24 12:05:10

标签: cassandra data-modeling cassandra-3.0

在Cassandra数据建模方面寻求帮助。

我在这里拿一些假的例子。说我有设备,我收集设备的数据。现在我有一些问题 1.选择设备状态=“已发布”的设备数据; 状态可以“发布”或“未发布”

  1. 选择设备状态=“已发布”且已启用= true;
  2. 的设备数据

    现在,如果我想创建列族以满足上述查询,那么我可以执行以下操作

    CREATE TABLE devices (
        device_id text,
        device_name text,
        status text,
        enabled boolean,
        .
        .
        .
        .
        .
        other device information,
        PRIMARY KEY (status, enabled, device_id))
    

    现在我的问题是

    1. 我可以像这样创建一个列族吗?如果是的话,是否存在任何潜在的问题。

    2. 设备的状态和启用值可能会发生变化,因此它会创建新行,因为主键会有所不同吗?如果它插入新行,那么如何删除旧记录?如果通过保留所有其他设备信息不能删除旧记录,如何引用新记录?

2 个答案:

答案 0 :(得分:1)

  

我可以像这样创建一个列族吗?如果是的话,有没有   这方面的潜在问题。

不...虽然你可以创建这样的表,但cassandra不会限制我建议不要。

表格设计有一个大问题,那就是数据分发。由于状态仅发布和未发布,因此将只创建2行。 这最终将导致宽行,这将降低性能。

CQL to Internal data structure

  

设备的状态和启用值可能会发生变化,因此也是如此   创建新行因为主键会有所不同吗?如果它   插入新行然后如何删除旧记录?如何参考   如果旧记录不能通过保留所有其他记录而删除,则为新记录   设备信息相同吗?

基于某个特定设备的上述信息,只能有4个distict值(status =已发布,enabled = true / false)和(status =已发布enabled = true / false),尽管它不是行...它是cql中的单元格。删除cassandra中的记录将创建逻辑删除,如果您经常更改状态并且您正在删除记录,那么它将创建许多逻辑删除,然后您将不得不运行频繁的压缩,否则查询将开始失败。

我建议使用一些主键。

答案 1 :(得分:0)

正如@undefined_variable所提到的,这种表将导致集群上的热点。实际上,您的整个数据最多只能在两个节点(以及副本)中收集。您可能想要问自己的第一个问题是,有多少设备,并且执行上述查询,确实有意义。如果你有100000个设备,你真的会一次读取100000行吗?不会有更多的过滤器。基于此,您需要决定如何对此进行建模。