Database 选择哪种NoSQL存储

Database 选择哪种NoSQL存储,database,nosql,Database,Nosql,据介绍,有很多NoSQL实现 面向文档存储和键值存储(人们经常提到)之间有什么区别?在一个级别上,文档和键值存储非常相似-当您请求密钥时,两者都将返回一个对象。在纯键/值中,该对象将是一个简单字符串,尽管它可以是一个序列化的复杂对象。文档数据库通过一些功能对此对象进行扩展,如部分更新功能或搜索索引 除此之外,您还需要考虑您的具体需求——NOSQL涵盖了许多不同的系统,并且与SQL数据库不同,它们在特定场景中都有不同的优点/缺点。这里是我写的一篇博文,它说明了一些最流行的系统之间的主要差异。它们之

据介绍,有很多NoSQL实现


面向文档存储和键值存储(人们经常提到)之间有什么区别?

在一个级别上,文档和键值存储非常相似-当您请求密钥时,两者都将返回一个对象。在纯键/值中,该对象将是一个简单字符串,尽管它可以是一个序列化的复杂对象。文档数据库通过一些功能对此对象进行扩展,如部分更新功能或搜索索引


除此之外,您还需要考虑您的具体需求——NOSQL涵盖了许多不同的系统,并且与SQL数据库不同,它们在特定场景中都有不同的优点/缺点。

这里是我写的一篇博文,它说明了一些最流行的系统之间的主要差异。它们之间最大的区别是选择优化以下两个方面中的哪一个:一致性、可用性和分区容差

在我看来,我真的不明白卡桑德拉是如何不一致的。它不能进行一致的更新,但我从未使用过需要更新的数据库模型,而不是一致的版本化插入(有时称为版本化更新,即使它们不是真正的更新)

此外,如果您将数据模型设置为ACID,则Cassandra也可以是完全ACID。与其使用数据库事务,不如按照银行的方式执行事务。在这里,事务不是多个数据更改,而是实际的数据对象

银行帐户中没有钱。它们有交易,您的帐户当前状态是根据交易计算的。此类交易不是数据库功能,而是数据模型的一部分。它们不需要立即可用于所有节点以保持一致,因为它们是不可变的

我没有发现使数据不可变不能解决一致性问题的情况。这与使事务成为数据模型的一部分作为不可变数据(一次写入多次读取)相结合,可以满足ACID要求

原子-事务作为唯一的不可变对象/行成为原子,没有任何复杂的数据库对象支持它

一致性-可以在数据模型中设计数据库操作或事务,以使其一致。所需要的只是它是不可变的(创建后从未更改)

隔离-不作为自己的数据对象的事务不应干扰其他事务,因此是隔离的

耐久性-如果事务不可变数据丢失,则相当于将数据库恢复到其以前的状态。如果数据未丢失,则它处于事务后状态。无论哪种情况,它都满足ACID的耐久性要求

的确,有几件事在“银行”里是办不到的数据模型。您的帐户信息不能有固定金额的ACID行。虽然交易本身是ACID,但这并不意味着依赖于它们的数据可以是ACID。这是因为所有交易可能尚未从所有节点可见。它们甚至可能位于另一个银行数据库中。因此,您的帐户余额无法达到ACIDCID一致性,但只要所有重要数据都具有ACID一致性,它就没有理由有这样的要求—它确实如此

我以银行数据库为例,因为它经常被用作如何使用帐户余额回滚进行SQL事务的示例—这在实际实现中从未发生过……因为银行事务必须支持异步多数据库事务,或者换句话说,跨银行事务


您还可以将其与文件系统.Cassandra关联(例如)可以为您提供文件的不可变快照的一致视图。不保证您有最新快照的视图,但保证有一个快照。这样可以使其与CVS/SVN或CODA一样一致。

这主要取决于您的需要。这完全是关于NoSQL的问题,与某人的需要无关。好吧,根据您的情况,最好的方法是oice将发生变化,因为它们没有所有相同的功能。您需要一个高度可扩展的解决方案吗?还是仅仅是一个小商店?您需要执行搜索?还是仅仅通过键获取?主要是读写?两者?性能各不相同。因此,问题要求您精确确定您的要求“您没有提供任何有关需求的信息”-这是如何得到+3的?他的要求是了解两者之间的区别。并非所有需求都是特定于实现的。您可以选择两个的想法是误导性的: