我目前正在优化我的应用程序,我想找出在下面的场景中哪种方法更快更好的性能。
我有一个有4个字段的表- id, user, status, entryTime
.
我每10秒向这个端点写100次,平均每秒钟写10次。
主键是 user
,聚类键为 entryTime and id
.
我有一个端点,在这里我需要检索特定 entryTime
例如,对于id为 1
,在哪里 entryTime
大于 2019-06-04T07:58:28.000Z
小于等于 2019-06-04T08:58:28.000Z
.
另一个端点是,我必须用特定的 status
对于特定用户。
使用不同的键为第二个端点(我需要在其中检索状态)创建物化视图,还是添加sasi索引更好?
由于表也经常更新,而且经常写入,从我所读到的内容来看,写入的性能约为10%,但它是否适用于所有具有频繁读/写的表?
是否有任何检查点供将来参考,我可以遵循这些检查点来确定我是否应该使用物化视图或sasi索引?
1条答案
按热度按时间fxnxkyjh1#
我没有任何使用sasi索引的经验,但是,我可以告诉您,对于status列,我假设行的状态会发生变化,如果您创建一个mview,将其作为分区键(这样您就可以按它进行过滤),那么每当主表上的状态发生变化时,mview将执行删除,然后执行插入(也使用查找)。对于您的加载(10次写入/秒-不确定其中有多少是更新),这在mview上可能会有问题。我们使用mviews,但是负载很轻。查询对它们非常有效。不确定这是否有用
@吉姆瓦特尼克,真的。谢谢你的澄清!物化视图应该用于不经常更新的表吗?
我认为这有帮助,但不是一个要求。请记住,cassandra首先对基表进行更改,然后将其传播到mview。因此,同样的复制问题也适用。此外,mview可能会错过更改,导致其不同步。修复它的唯一方法是重建mview。mview的一个优点是,它允许您将一个可更新/可更改的列作为分区键的一部分,这在独立表中是不允许的。缺点是它确实执行了一个额外的操作(同样,delete后跟insert)。可能会造成额外的负荷