1

我需要一个可以在 Windows Azure 上运行的 NoSQL 数据库,它适用于以下参数。目前,Azure 表存储、HBase 和 Cassandra 似乎是最有希望的选择。

  • 10亿实体
  • 每秒最多 100 次读取,尽管缓存主要会使其更少
  • 每秒大约 10 - 50 次写入

强一致性将是一个加分项,因此在这方面 HBase 可能会比 Cassandra 更好。

除了用于全文搜索和一些过滤的 ElasticSearch 或 Windows Azure Search 之外,查询通常在具有各种索引的辅助内存数据库上完成。

Azure 表存储看起来可能不错,但据我所知,Azure 表存储和 HBase 之间的最大区别在于 HBase 支持更新和读取单个属性的值,而不是同时读取整个实体的值。我想 HBase 肯定有一些缺点,但我不确定在这种情况下它们会是什么。

我也认为 crate.io 看起来可能很有趣,但我想知道是否可能存在无法预料的问题。

在这种情况下,任何人对不同数据库的优缺点有任何其他想法,如果它们中的任何一个由于某种原因真的不适合?

4

1 回答 1

1

我目前与 Cassandra 合作,我可能会在一些优点和缺点方面提供帮助。

要求

Cassandra 可以轻松处理这 3 个要求。它旨在具有快速读取和写入功能。事实上,Cassandra 的写入速度非常快,主要是因为您无需读取即可写入。

此外,Cassandra 将一些数据保存在内存中,因此您甚至可以避免使用辅助数据库。

一致性

在 Cassandra 中,您可以在每个查询中选择一致性,因此您可以根据需要获得一致的数据。通常你使用:

  • ONE - 只有一个节点必须获取或接受更改。这意味着快速读/写,但一致性低(您可以让其他机器在未实现一致性的情况下提供较旧的信息)。

  • QUORUM - 51% 的节点必须获得或接受更改。这意味着读取和写入速度不快,但是如果您在读取和写入中都使用它,您将获得完全的一致性。那是因为如果在插入/更新/删除后超过一半的节点有数据,那么,当从超过一半的节点读取数据时,至少有一个节点将拥有最新的信息,这将是要交付的信息.

这两个选项都是推荐的,因为它们可以避免单点故障。如果所有机器都必须接受,如果一个节点停机或忙碌,您将无法查询。

优点

Cassandra 是性能、线性可扩展性和避免单点故障的解决方案(您可以让机器停机,其他人将承担工作)。它的大部分管理工作都是自动完成的。您无需管理数据分发、复制等。

缺点

Cassandra 的缺点在于建模和查询。

使用关系数据库,您可以围绕实体及其之间的关系进行建模。通常,您并不真正关心将进行哪些查询,而是努力对其进行规范化。

Cassandra 的策略是不同的。您对表进行建模以服务于查询。发生这种情况是因为您无法加入,也无法以任何您想要的方式过滤数据(仅通过其主键)。因此,如果您有一个拥有杂货店的公司的数据库,并且您想要进行查询以返回某个商店(例如:纽约市)的所有产品,并进行另一个查询以返回某个部门的所有产品(例如。 :计算机),您将有两个表“ProductsByStore”和“ProductsByDepartment”具有相同的数据,但组织方式不同以服务于查询。

物化视图可以帮助解决这个问题,避免在多个表中进行更改,但它是为了展示 Cassandra 的工作方式有何不同。

出于同样的原因,非规范化在 Cassandra 中也很常见:性能。

于 2017-09-19T23:00:19.527 回答