我目前正在优化我的应用程序,我想找出在以下情况下哪种方法更快,性能更好。
我有一个包含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索引?
答案 0 :(得分:1)
我对SASI索引没有任何经验,但是,我可以通过STATUS列告诉您,并且我假设如果创建一个MVIEW作为分区键,则行的状态将会改变(因此您可以按它进行筛选),每次主表上的状态更改时,MVIEW都会执行DELETE,然后执行INSERT(也使用查找)。负载(每秒10次写入-不确定其中有多少次是UPDATES)在MVIEW上可能会出现问题。我们使用MVIEWS,但是负担很轻。查询对它们的效果很好。不确定是否有帮助
@JimWartnick完全可以。感谢您的澄清!应该在不经常更新的表上使用实例化视图吗?
我认为这有所帮助,但不是必需的。只要记住,Cassandra首先在基表上进行更改,然后将其传播到MVIEW。因此,同样的复制问题也适用。另外,MVIEW可能会丢失更改,从而导致其不同步。修复它的唯一方法是重建MVIEW。关于MVIEW的一件好事是,它确实允许您将可更新/可更改的列作为分区键的一部分,这在独立表上是不允许的。缺点是它确实执行了额外的操作(同样,先删除,再插入)。这可能会导致额外的负担