我需要一个运行在Windows上的NoSQL数据库,它可以很好地处理以下参数。目前,Azure Table,HBase和Cassandra似乎是最有希望的选择。
强的一致性将是一个好处,所以在这方面HBase也许会比卡桑德拉更好。
查询通常是在内存中的二级数据库上进行的,除了ElasticSearch或Windows搜索全文搜索之外,还有一些筛选。
Azure表存储看起来可能不错,但据我所知,Azure表存储与HBase的最大区别是,HBase支持更新和读取单个属性的值,而不是一次性读取整个实体的值。不过,我想HBase肯定有一些缺点,但我不知道在这种情况下它们会是什么。
我也认为crate.io看起来可能很有趣,但我想知道是否会有一些不可预见的问题。
在这种情况下,有谁对不同数据库的优点和缺点有任何其他的想法,如果其中任何一个确实由于某种原因而不合适呢?
发布于 2017-09-19 15:00:19
我目前与卡桑德拉合作,我可能会帮助一些利弊。
需求
卡桑德拉可以很容易地处理这3项要求。它被设计成具有快速读写功能。事实上,卡桑德拉写得很快,主要是因为你可以不读就写。
而且,Cassandra将其一些数据保存在内存中,这样甚至可以避免使用二级数据库。
一致性
在Cassandra中,您可以在所做的每个查询中选择一致性,因此,如果您愿意的话,您可以拥有一致的数据。通常你会使用:
这两个选项都是推荐的,因为它们避免了单一的失败点。如果所有机器都必须接受,如果一个节点关闭或繁忙,您将无法进行查询。
Pros
Cassandra是性能、线性可伸缩性和避免单点故障的解决方案(您可以让机器停机,其他人将承担这项工作)。它的大部分管理工作都是自动完成的。您不需要管理数据分发、复制等。
Cons
Cassandra的缺点在于建模和查询。
使用关系数据库,您可以围绕实体及其之间的关系进行建模。通常,您并不真正关心将进行哪些查询,而是将其规范化。
卡桑德拉的策略是不同的。您可以对表进行建模以满足查询的需要。这种情况之所以发生,是因为你不能加入,也不能以任何你想要的方式过滤数据(只通过它的主键)。因此,如果您有一个有杂货店的公司的数据库,并且您想要进行一个返回某一商店(Ex.:New York City)所有产品的查询,以及返回某个部门(Ex.:Computers)所有产品的另一个查询,那么您将有两个表"ProductsByStore“和"ProductsByDepartment”,它们具有相同的数据,但其组织方式不同。
物化视图可以帮助实现这一点,从而避免了在多个表中进行更改的需要,但它是为了展示如何在Cassandra中以不同的方式工作。
反正规化在卡桑德拉也很常见,原因也是一样的:性能。
https://stackoverflow.com/questions/28079436
复制相似问题