Cassandra 卡桑德拉数据建模:使用地图还是有很多空列?

Cassandra 卡桑德拉数据建模:使用地图还是有很多空列?,cassandra,cql,cql3,nosql,Cassandra,Cql,Cql3,Nosql,我总共需要在我的专栏族中存储大约20-30个专栏。然而,我的数据有不同的变化。我有不同的对象,它们在逻辑上属于一起,但没有相同的字段(字段与键名中的字段相同)。有时提供5个字段,有时提供7个字段,以此类推。但是,它们都共享一部分始终提供的字段 我在此列族中插入的行永远不会填充所有列。当使用映射时,我可以根据对象类型添加键/值,并且不会有其他模型引入的可能开销 我关心的是每行中都有很多空列 使用地图的一个可能的缺点是 收集的问题: 您是建议我使用地图还是将可能需要的所有列添加到我的列族中 我假设基

我总共需要在我的专栏族中存储大约20-30个专栏。然而,我的数据有不同的变化。我有不同的对象,它们在逻辑上属于一起,但没有相同的字段(字段与键名中的字段相同)。有时提供5个字段,有时提供7个字段,以此类推。但是,它们都共享一部分始终提供的字段

我在此列族中插入的行永远不会填充所有列。当使用映射时,我可以根据对象类型添加键/值,并且不会有其他模型引入的可能开销

我关心的是每行中都有很多空列

使用地图的一个可能的缺点是

收集的问题:

  • 您是建议我使用地图还是将可能需要的所有列添加到我的列族中
  • 我假设基于映射中的键/值查询数据要比从列“直接”访问数据慢得多。这是正确的吗
  • 当每行都有很多空列时,会有什么负面影响?头顶
  • 使用映射时是否可能有“通用”值类型?我想存储不同的数据,主要是字符串,但也有浮点和整数。我是否需要使用
    映射
    并在我的应用程序中强制转换值 我使用的是Cassandra 3.0.8 | CQL规范3.4.0 |本机协议v4


    感谢

    我认为拥有稀疏列值是完全好的,因为这就是为什么创建BigTable和所有实现相同稀疏映射数据模型的相关解决方案的原因之一

    正如S.O.在另一份答复中指出的那样,我将更加关注cql集合的使用限制

    关于你的具体问题:

    • 我个人将使用普通列
    • 这取决于访问模式。你需要地图上所有的栏吗?如果没有,请注意Cassandra将检索整个集合,因此即使不需要,您也将获得所有数据
    • 我看不到任何开销:数据将连续存储,忽略空列
    无论如何,你可以找到一些关于卡桑德拉局限性的信息。这是一个旧页面,但我假设您可以使用它们作为更新值的下限


    希望有帮助。

    事实上,Map、Set、List只是旧的casndra数据结构的CQL sintax,而Map存储为通常的宽行


    这里有几个关于映射cql类型的问题

    使用普通列会迫使我使用严格数量的列,对吗?使用收集方法时,添加新列时,我会更加灵活。当一个模式已经有xx GB的数据时,是否可以向该模式添加更多的列?使用普通列,我认为您应该使用可以拥有的最大列数来定义您的模式。这并没有坏处,因为如果一行没有特定的列,它就不会浪费空间。如果需要,您仍然可以向模式中添加新列。正如文档中指出的,向模式中添加列不会验证过去的数据。使用集合可以缩短模式,但答案中会指出缺点。