Cassandra 卡桑德拉数据建模:使用地图还是有很多空列?
我总共需要在我的专栏族中存储大约20-30个专栏。然而,我的数据有不同的变化。我有不同的对象,它们在逻辑上属于一起,但没有相同的字段(字段与键名中的字段相同)。有时提供5个字段,有时提供7个字段,以此类推。但是,它们都共享一部分始终提供的字段 我在此列族中插入的行永远不会填充所有列。当使用映射时,我可以根据对象类型添加键/值,并且不会有其他模型引入的可能开销 我关心的是每行中都有很多空列 使用地图的一个可能的缺点是 收集的问题:Cassandra 卡桑德拉数据建模:使用地图还是有很多空列?,cassandra,cql,cql3,nosql,Cassandra,Cql,Cql3,Nosql,我总共需要在我的专栏族中存储大约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的数据时,是否可以向该模式添加更多的列?使用普通列,我认为您应该使用可以拥有的最大列数来定义您的模式。这并没有坏处,因为如果一行没有特定的列,它就不会浪费空间。如果需要,您仍然可以向模式中添加新列。正如文档中指出的,向模式中添加列不会验证过去的数据。使用集合可以缩短模式,但答案中会指出缺点。