我有大约20-30列,我需要在我的专栏家庭中储存。但是,我的数据有不同的变化。我有不同的对象在逻辑上属于一起,但没有相同的字段(字段中的键名称)。有时,提供5个字段,有时7个字段等。它们都共享一部分始终提供的字段。Cassandra数据建模:使用Map还是有很多空列?
我插入此列的行不会填充所有列。在使用Map时,我可以根据对象类型添加键/值,并且不会有可能由我的其他模型引入的开销。
我很担心每行有很多空列。
使用Map的可能缺点是you can't have an index for map keys and map values coexist。
问题云集:
- 你建议我使用地图或者只是添加所有我需要我的专栏的家人列?
- 我假设根据Map中的键/值查询数据比从列直接访问数据要慢。它是否正确?
- 当我每行有很多空列时,有什么缺点?高架?
- 当使用Map时,是否有可能具有“通用”值类型?我想存储不同的数据,主要是字符串,但也浮动和整数。我是否需要使用
map<text,text>
并在我的应用程序中投射这些值?
我正在使用Cassandra 3.0.8 | CQL规范3.4.0 |本地协议V4
感谢
使用普通的列会迫使我到列的严格数量的若干Slides,对不对?使用收集方法时,添加新列时我会更加灵活。如果模式已经有xx GB数据,甚至可以向模式添加更多列? – j9dy
使用普通列,我认为你应该用最大数量的列来定义你的模式。这里没有缺点,因为如果一行没有特定的列,它不会浪费空间。如果需要,您仍然可以向模式添加新列。正如文档[here](https://docs.datastax.com/en/cql/3.1/cql/cql_reference/alter_table_r.html)中指出的那样,向模式添加列不会验证过去的数据。使用一个集合可以缩短你的模式,但是你会在答案中指出缺点。 – riccamini