我需要一个可在Windows Azure上运行的NoSQL数据库,该数据库适用于以下参数。目前Azure Table Storage,HBase和Cassandra似乎是最有前途的选择。
强烈的一致性将是一个加分,所以在这方面HBase可能会比Cassandra更好。
除了ElasticSearch或Windows Azure搜索全文搜索以及可能还有一些过滤之外,查询通常会在具有各种索引的辅助内存数据库中完成。
Azure表存储看起来很不错,但据我所知,Azure表存储和HBase之间的最大区别在于HBase支持同时更新和读取单个属性的值而不是整个实体。我想HBase肯定会有一些缺点,但我不确定在这种情况下它们会是什么。
我也认为crate.io看起来很有趣,但我想知道是否会有不可预见的问题。
在这种情况下,任何人对这些不同数据库的优缺点有任何其他想法,如果其中任何一个因某种原因真的不合适?
答案 0 :(得分:1)
我目前正在与Cassandra合作,我可能会帮助我解决一些利弊。
<强>要求强>
Cassandra可以轻松处理这3项要求。它被设计为具有快速读写。实际上,Cassandra写作速度非常快,主要是因为你可以在不进行读取的情况下进行编写。
此外,Cassandra将其部分数据保存在内存中,因此您甚至可以避免使用辅助数据库。
<强>一致性强>
在Cassandra中,您可以在每个查询中选择一致性,因此,如果您愿意,可以获得一致的数据。通常你使用:
ONE - 只有一个节点必须接受或接受更改。这意味着快速读/写,但一致性较低(您可以让其他机器在未达到一致性的情况下提供较旧的信息)。
QUORUM - 51%的节点必须接受或接受更改。这意味着读取和写入速度不快,但如果在BOTH读写中使用它,则会获得完全一致性。这是因为如果超过一半的节点在插入/更新/删除后拥有数据,那么,当从超过一半的节点读取时,至少有一个节点将拥有最新的信息,这将是一个要交付。
这两个选项都是推荐的选项,因为它们可以避免单点故障。如果所有机器都必须接受,如果一个节点停机或忙碌,您将无法查询。
<强>赞成强>
Cassandra是性能,线性可扩展性的解决方案,可以避免单点故障(您可以关闭计算机,其他人可以完成工作)。它自动完成大部分管理工作。您不需要管理数据分发,复制等。
<强>缺点强>
Cassandra的缺点在于建模和查询。
使用关系数据库,您可以围绕实体及其之间的关系进行建模。通常情况下,您并不真正关心将进行哪些查询,并且您需要将其标准化。
Cassandra的战略不同。您对表进行建模以提供查询。这种情况发生是因为您无法加入,您无法以任何方式过滤数据(仅通过其主键)。 因此,如果您拥有一家拥有杂货店的公司的数据库,并且您希望查询返回某个商店的所有产品(例如:纽约市),而另一个查询则返回某个部门的所有产品(例如, :电脑),你会有两张桌子&#34; ProductsByStore&#34;和&#34; ProductsByDepartment&#34;使用相同的数据,但以不同的方式组织以提供查询。
物化视图可以帮助解决这个问题,避免在多个表中进行更改,但它是为了展示Cassandra的工作方式。
非正规化在Cassandra中也很常见,原因相同:性能。