我目前与 Cassandra 合作,我可能会在一些优点和缺点方面提供帮助。
要求
Cassandra 可以轻松处理这 3 个要求。它旨在具有快速读取和写入功能。事实上,Cassandra 的写入速度非常快,主要是因为您无需读取即可写入。
此外,Cassandra 将一些数据保存在内存中,因此您甚至可以避免使用辅助数据库。
一致性
在 Cassandra 中,您可以在每个查询中选择一致性,因此您可以根据需要获得一致的数据。通常你使用:
ONE - 只有一个节点必须获取或接受更改。这意味着快速读/写,但一致性低(您可以让其他机器在未实现一致性的情况下提供较旧的信息)。
QUORUM - 51% 的节点必须获得或接受更改。这意味着读取和写入速度不快,但是如果您在读取和写入中都使用它,您将获得完全的一致性。那是因为如果在插入/更新/删除后超过一半的节点有数据,那么,当从超过一半的节点读取数据时,至少有一个节点将拥有最新的信息,这将是要交付的信息.
这两个选项都是推荐的,因为它们可以避免单点故障。如果所有机器都必须接受,如果一个节点停机或忙碌,您将无法查询。
优点
Cassandra 是性能、线性可扩展性和避免单点故障的解决方案(您可以让机器停机,其他人将承担工作)。它的大部分管理工作都是自动完成的。您无需管理数据分发、复制等。
缺点
Cassandra 的缺点在于建模和查询。
使用关系数据库,您可以围绕实体及其之间的关系进行建模。通常,您并不真正关心将进行哪些查询,而是努力对其进行规范化。
Cassandra 的策略是不同的。您对表进行建模以服务于查询。发生这种情况是因为您无法加入,也无法以任何您想要的方式过滤数据(仅通过其主键)。因此,如果您有一个拥有杂货店的公司的数据库,并且您想要进行查询以返回某个商店(例如:纽约市)的所有产品,并进行另一个查询以返回某个部门的所有产品(例如。 :计算机),您将有两个表“ProductsByStore”和“ProductsByDepartment”具有相同的数据,但组织方式不同以服务于查询。
物化视图可以帮助解决这个问题,避免在多个表中进行更改,但它是为了展示 Cassandra 的工作方式有何不同。
出于同样的原因,非规范化在 Cassandra 中也很常见:性能。