我的团队正在开发一个必须快速存储和读取大量数据的应用程序。因此,我们被要求使用Cassandra。
我们写下了预期的查询,并在此基础上设计了表格。最大的四个表存储了时间序列数据,其中分区键由字段a,b和c组成,其中时间戳t用作聚类键。
不幸的是,客户决定他希望能够基于这些字段的任意组合来过滤这四个表中的数据-我们并未围绕应用程序进行设计。现在,我们想知道如何修改表和查询,由于缺少具有丰富的Cassandra经验的人,这是一个问题。
权宜之计的解决方案是使用“允许过滤”子句,但我们担心效率会遭受重大损失。我们试图基于表构建一系列物化视图,其中分区键仅由时间戳组成-每个表有七个视图,三个视图具有由字段a / b / c组成的分区键,另外三个具有分区键ab / ac的视图/ bc,最后一个是PK abc。这是行不通的,因为Cassandra允许MV仅将其分区键扩展到基表上的一个字段,并且不允许在MV上构建MV。我们正在考虑在这三个字段上添加索引,但这似乎是一个糟糕的主意,因为字段a,b和c的基数范围从数万到数万。
在这种情况下最好的解决方案是什么?创建28个表-为四个原始表中的每个表创建7个表-似乎是一场噩梦。还是我们应该放弃Cassandra,而争取迁移到其他数据库?