我正在学习卡桑德拉,我知道我应该为每个查询制作一张表格。我不确定何时应该制作单独的表格或物化视图。例如,我有用户和帖子以下查询:何时使用物化视图?
users_by_id users_by_email users_by_session_key
posts_by_id posts_by_category posts_by_user
我就应该总是用物化视图?
在我看来,如果你想保持邮件或用户在查询中保持一致,那么我必须使用物化视图。但是我读到的物化视图有一个read before write
延迟。另一方面,如果我使用不同的表格,每次创建新帖子时我应该制作3个插入点吗?我注意到我得到了错误batch with conditions cannot span multiple tables
,这意味着我必须一次将它插入到每个单独的表中,如果其中一个查询失败,会导致一致性问题。 (批处理语句,如果其中一个失败,将全部失败3)。
因此,由于它具有一致性是有意义的,那么在我看来,我总是希望使用物化视图,并且必须采取惩罚措施。
我想我的另一个问题是数据何时会不一致?
所以希望有人能够为我提供更多的清晰度,以便如何在用户或帖子这样的'理论模型'上的cassandra中处理多个查询。我应该使用物化视图吗?如果我为每个模型使用3个不同的表格,我如何保持它们一致?只希望所有3插入不失败?看起来不正确。
在你的第一段中,你提到你提到的权衡是时间vs性能。我有时间让id喜欢使这3个不同的表而不是物化视图。然而,我仍然困惑什么是保持3 Posts表中的数据一致的正确方法。 (顺便说一下,当我说一致性时,我不是指复制品间的一致性,而是3 posts表中数据的一致性)。我的担心是,我的服务器使3插入创建一个帖子,但在一次我的服务器失败。现在我有'posts_by_id'但没有'posts_By_category'表。那么我将如何处理3个表格的数据一致性呢? –
您可以做两件事:使用QUOURUM或创建批量修复过程。第一个很容易实现:https://docs.datastax.com/en/cassandra/2.0/cassandra/dml/dml_config_consistency_c.html 对于第二个,您需要像kafka一样的Message Queue System。您创建一个快速流处理应用程序。第二个应用程序在您的批处理流中只做一件事:修复损坏的表。第二种解决方案非常快速,适用于实时分析,但第一种解决方案更安全。我认为,就你而言,第一个是更好的选择。 –