使用Cassandra数据库的优缺点是什么?

from quora

Cassandra是一个非常依赖用例的数据库。在大多数情况下,一个简单的MySQL或PostgreSQL实例即可完成工作。当您发现自己需要Cassandra提供的特定属性时,使用它可能很有意义。

使用Cassandra有许多不同的利弊,其中许多取决于您希望如何使用它。我认为,在决定是否使用Cassandra时,人们倾向于寻找一些东西。

优点

写入速度:卡桑德拉(Cassandra)的“成名主张”之一是它可以处理的令人难以置信的写入量。通过首先写入内存中的数据结构,然后写入仅追加日志,它能够处理如此大量的写入。然后,这些数据结构在以后的时间被“整理”到一个更永久且经过读取优化的文件中。发生故障时,日志仅用于恢复内存中的数据。
多DC复制:开箱即用,Cassandra带有多数据中心复制。此复制会将信息复制到Cassandra进程的任意数量的实例中。此外,您可以创建多个“热”数据中心,这些中心也可以获取数据的副本。这些可用于地理性能或灾难恢复,或同时用于两者。多数据中心设置就像在配置文件中更改一行并更新架构一样简单。多DC复制是人们选择使用Cassandra的主要原因之一。
可调一致性:关于复制数据,您必须能够确定一个或多个节点发生故障时发生的情况。Cassandra允许您逐个查询地决定如何处理潜在问题。如果您始终拥有一个数据集,而该数据集必须始终具有最新的最新信息,那么您可以选择以仲裁级别读取和写入数据。如果您有一个数据集,即使只有1个节点处于活动状态,也要不惜一切代价进行写入,并且不要求具有最新信息,则可以在“ ANY”级别进行写入。有许多不同的方式来读取/写入您的信息。Cassandra允许您选择最适合您的用例和价值的一种。
基于JVM:Apache Cassandra用Java编写。这意味着它可以与其他基于JVM的应用程序紧密集成,包括许多流行的基于数据的工具,例如:Apache SOLR,Spark,Hadoop,Hive,PIG,Mahout等。除此之外,JVM还提供了大量的支持和工具来解决可能出现的各种问题。
CQL:CQL(Cassandra查询语言)是一种查询Cassandra的熟悉方式。它是SQL的子集,并具有许多相同的功能,从而使从基于SQL的RDBMS到Cassandra的过渡不那么困难。
缺点

无需临时查询:在幕后,Cassandra数据存储层基本上是键值存储系统。这意味着您必须围绕要显示的查询“建模”数据,而不是围绕数据本身的结构。这可能导致以不同的方式多次存储数据,从而能够满足您的应用程序的需求。
无聚合:较新版本的Cassandra对具有单个分区的聚合的支持有限。这用途非常有限。由于Cassandra是键值存储,因此即使可能完成SUM,MIN,MAX,AVG和其他聚合之类的操作也非常耗费资源。如果您的应用程序需要进行临时分析,那么Cassandra可能不适合您。
不可预测的性能:由于Cassandra具有许多不同的异步作业和后台任务,这些作业和后台任务不是用户计划的,因此性能可能不可预测。这意味着您可能会看到与查询或查询量无关的性能影响。这会使故障排除性能问题变得相当困难。
基于JVM:是的,我知道它在上面被列为“ Pro”,但有一些警告。JVM虽然速度很快,但仍然是垃圾收集语言。这意味着内存管理是由语言本身而不是应用程序完成的。对于许多用户而言,这永远不是问题,但是如果您获取大量信息(无论是请求量还是数据大小),都需要调整JVM以适合实现的特定需求。这意味着需要具备数据库编写语言所需要的专业知识和知识。
CQL:是的,是的,就像JVM一样,它也被列为“ Pro”。由于CQL非常类似于SQL,因此来自SQL的人很容易对支持或不支持的内容感到困惑。这意味着对于不了解Cassandra局限性的开发人员而言,这会增加挫败感(读取成本)。
在赞成和反对方面都有很多。在我看来,这只是最常出现的少数几个,而那些决定使用Cassandra的人们应该被意识到。

Cassandra数据库的优点是:

Cassandra数据库自动将发生故障的节点的数据复制到另一个节点,而无需任何暂停。
Cassandra数据库提供水平缩放,并通过增加负载来增强性能。
Cassandra坚固耐用并提供数据一致性,使其最适合保存公司的关键数据
Cassandra提供了简单的查询语言(CQL),与关系数据库非常相似,因此开发人员很容易适应。
卡桑德拉数据库的缺点是:

性能是不可预测的,因为所有后台任务都是以随机方式执行的,而不是由用户安排的。
在此,数据是围绕查询建模的,而不是围绕其结构建模的,这是因为多次存储同一数据。
为了存储大量数据,需要JVM管理本身就是一种语言的内存,因此垃圾回收不是由应用程序而是由Cassandra中的一种语言完成。

你可能感兴趣的:(java基础问题,数据库)