0

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

我有一个有 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 索引?

4

1 回答 1

1

我对 SASI 索引没有任何经验,但是,我可以告诉你,使用 STATUS 列,我假设行的状态会改变,如果你创建一个 MVIEW 并将它作为分区键(所以你可以通过它过滤),每次主表上的状态发生变化时,MVIEW都会执行一个DELETE,然后是一个INSERT(也使用查找)。随着您的负载(10 次写入/秒 - 不确定其中有多少是更新),这在 MVIEW 上可能会出现问题。我们使用MVIEWS,但是负载很轻。查询对它们非常有效。不确定这有帮助

@JimWartnick 完全可以。感谢您澄清这一点!是否应该在不经常更新的表上使用物化视图?

我认为这有帮助,但不是必需的。请记住,Cassandra 首先对基表进行更改,然后将其传播到 MVIEW。所以同样的复制问题也适用。此外,MVIEW 可能会错过更改,导致它不同步。修复它的唯一方法是重建 MVIEW。MVIEW 的优点之一是它允许您将可更新/可更改的列作为分区键的一部分,这在独立表上是不允许的。缺点是它确实执行了额外的操作(同样,删除后插入)。这可能会导致额外的负载

于 2019-06-07T11:59:43.543 回答