发布
社区首页 >问答首页 >选择NoSQL数据库

选择NoSQL数据库
EN

Stack Overflow用户
提问于 2015-01-22 00:32:17
回答 1查看 549关注 0票数 1

我需要一个运行在Windows上的NoSQL数据库,它可以很好地处理以下参数。目前,Azure Table,HBase和Cassandra似乎是最有希望的选择。

  • 10亿个实体
  • 每秒最多读取100次,但是缓存通常会使其更少。
  • 大约10 - 50写每秒。

强的一致性将是一个好处,所以在这方面HBase也许会比卡桑德拉更好。

查询通常是在内存中的二级数据库上进行的,除了ElasticSearch或Windows搜索全文搜索之外,还有一些筛选。

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

我也认为crate.io看起来可能很有趣,但我想知道是否会有一些不可预见的问题。

在这种情况下,有谁对不同数据库的优点和缺点有任何其他的想法,如果其中任何一个确实由于某种原因而不合适呢?

EN

回答 1

Stack Overflow用户

发布于 2017-09-19 23:00:19

我目前与卡桑德拉合作,我可能会帮助一些利弊。

需求

卡桑德拉可以很容易地处理这3项要求。它被设计成具有快速读写功能。事实上,卡桑德拉写得很快,主要是因为你可以不读就写。

而且,Cassandra将其一些数据保存在内存中,这样甚至可以避免使用二级数据库。

一致性

在Cassandra中,您可以在所做的每个查询中选择一致性,因此,如果您愿意的话,您可以拥有一致的数据。通常你会使用:

  • 只有一个节点必须得到或接受更改。这意味着读取/写入速度快,但一致性低(您可以让其他机器在未实现一致性的情况下传递旧信息)。
  • 仲裁- 51%的节点必须获得或接受更改。这意味着读写速度不那么快,但是如果同时在读写中使用它,则会获得完全的一致性。这是因为如果超过一半的节点在插入/更新/删除后拥有数据,那么,当从超过一半的节点读取数据时,至少有一个节点将拥有最新的信息,这将是要传递的信息。

这两个选项都是推荐的,因为它们避免了单一的失败点。如果所有机器都必须接受,如果一个节点关闭或繁忙,您将无法进行查询。

Pros

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

Cons

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

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

卡桑德拉的策略是不同的。您可以对表进行建模以满足查询的需要。这种情况之所以发生,是因为你不能加入,也不能以任何你想要的方式过滤数据(只通过它的主键)。因此,如果您有一个有杂货店的公司的数据库,并且您想要进行一个返回某一商店(Ex.:New York City)所有产品的查询,以及返回某个部门(Ex.:Computers)所有产品的另一个查询,那么您将有两个表"ProductsByStore“和"ProductsByDepartment”,它们具有相同的数据,但其组织方式不同。

物化视图可以帮助实现这一点,从而避免了在多个表中进行更改的需要,但它是为了展示如何在Cassandra中以不同的方式工作。

反正规化在卡桑德拉也很常见,原因也是一样的:性能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28079436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档