Cassandra SASI索引或实例化视图-性能改进

时间:2019-06-05 08:15:25

标签: cassandra express-cassandra

我目前正在优化我的应用程序,我想找出在以下情况下哪种方法更快,性能更好。

我有一个包含4个字段的表格-$select_client= "SELECT id FROM `table`"; $sql=$dbconn->prepare($select_client); $sql->execute(); $wlvd=$sql->fetchAll(PDO::FETCH_OBJ); foreach($wlvd as $rows); if($sql->rowCount() > 0){ foreach($wlvd as $rows){ $id = $rows->id; $array_id= array($id); echo $array_id; } }

我正在每10秒向此端点写入大约100次,因此平均每秒写入10次。

主键为id, user, status, entryTime,聚类键为user

我有一个端点,我需要在其中检索特定用户在特定entryTime and id之间的所有条目,例如,对于ID为entryTime的用户,其中1是大于entryTime且小于2019-06-04T07:58:28.000Z

另一个端点是,我必须针对特定用户使用特定的2019-06-04T08:58:28.000Z进行检索。

使用不同的键为第二个端点(需要检索状态)创建物化视图,还是添加SASI索引更好?

由于从我所读取的内容来看,表也要经常更新和写入,因此写入的性能大约为10%,但是它是否适用于所有具有频繁读取/写入操作的表?

我是否可以遵循一些检查点以供将来参考,以确定是否应使用物化视图或SASI索引?

1 个答案:

答案 0 :(得分:1)

我对SASI索引没有任何经验,但是,我可以通过STATUS列告诉您,并且我假设如果创建一个MVIEW作为分区键,则行的状态将会改变(因此您可以按它进行筛选),每次主表上的状态更改时,MVIEW都会执行DELETE,然后执行INSERT(也使用查找)。负载(每秒10次写入-不确定其中有多少次是UPDATES)在MVIEW上可能会出现问题。我们使用MVIEWS,但是负担很轻。查询对它们的效果很好。不确定是否有帮助

@JimWartnick完全可以。感谢您的澄清!应该在不经常更新的表上使用实例化视图吗?

我认为这有所帮助,但不是必需的。只要记住,Cassandra首先在基表上进行更改,然后将其传播到MVIEW。因此,同样的复制问题也适用。另外,MVIEW可能会丢失更改,从而导致其不同步。修复它的唯一方法是重建MVIEW。关于MVIEW的一件好事是,它确实允许您将可更新/可更改的列作为分区键的一部分,这在独立表上是不允许的。缺点是它确实执行了额外的操作(同样,先删除,再插入)。这可能会导致额外的负担