在设计系统时,很难在关系(RDBS)和非关系数据库(NoSQL)之间进行选择。 正确理解这两个局限性将使决策变得更加容易。




SQL server 一致性检查 进度 nosql一致性_SQL server 一致性检查 进度


> SQL vs NoSQL

在深入研究NoSQL数据库之前,了解关系数据库的局限性很重要。 关系数据库已经存在了近40年,并且运行良好。 数据结构合理,记录保存在表中。 表由行,主键,唯一键组成,并且表可以相互连接。 它支持的另一个重要功能是事务,它的属性称为ACID。 ACID属性包含4个不同的属性,如下所述:

· 原子性:它保证了如果发生多步骤交易,则需要完成所有步骤才能使交易成功。

· 一致性:它确保数据库在任何事务之前和之后均应保持一致。

· 隔离:它保证可以同时发生多个事务,而不会互相干扰。

· 耐用性:即使服务器崩溃或断电,它也可以确保持久存储数据,而无需担心数据。

但是,随着大数据技术的发展,传统的基于SQL的数据库已不足以管理快速增长的数据量以及日益复杂的数据结构。 关系数据库的一些缺点如下:

· 模式:关系数据库的模式是固定的,您必须事先设计它。 对于快速增长的应用程序,很难假设数据的复杂性然后进行设计。

· 数据结构:由于关系数据库支持的数据结构有限,我们需要做更多的连接才能获得所需的数据,并且连接总是很昂贵的。

· 扩展:由于数据增长非常迅速,因此很难扩展关系数据库。

我们对此有任何解决方法吗?

幸运的是! 我们有。

非规范化就是其中之一。 展开单个表并向其中添加更多列,以便在获取结果时避免连接。 这样可以提高读取性能,但会导致数据异常。

另一种技术是分片。 在这种技术中,可以对数据库进行分割,并将其存储在不同的服务器中。 这样可以提高读写性能,但是很难管理。

因此,总结一下。 关系数据库具有很多优点和缺点,我们可以解决它们,但是也带来了其他挑战。

NoSQL数据库自然允许对数据进行非规范化,可伸缩性和灵活的架构。 这些东西是免费提供的吗? 没有! 在这个世界上,没有什么是免费的。 放宽ACID限制。 尽管ACID对于某些应用程序是一个重要的约束,但对于所有应用程序却不是。 最后但并非最不重要的一点是,NoSQL数据库提供了一种查询大型和更复杂的数据结构的新方法,这在关系数据库中是不可能的。 这是使用NoSQL进行数据科学的关键因素之一。


SQL server 一致性检查 进度 nosql一致性_数据_02


> Scaling techniques

NoSQL数据库的优点:

· 灵活模式:通常提供非常灵活的模式。 根据需求可以很容易地更改架构。

· 水平扩展:允许在需要时添加更便宜的商品服务器。 SQL数据库在超出容量时需要垂直扩展(迁移到更大的服务器)。

· 更快的查询:NoSQL数据库的一项主要原则是"应将一起访问的数据存储在一起"。 因此,查询通常无需连接即可工作,这使查询速度更快。

NoSQL数据库的一些示例是Redis,Dynamo,CouchDB,MongoDB,Cassandra,HBase和Neo4J。 很多人在关系数据库中遇到许多不同的问题,这最终不足为奇,他们最终设计了不同类型的NoSQL数据库。


SQL server 一致性检查 进度 nosql一致性_SQL server 一致性检查 进度_03


> Type of databases

· 键值存储:就像字典一样,您可以在其中了解键并可以检索其值。 它是NoSQL数据库的最简单类型之一。 这种数据库对于缓存确实很有用。 示例:Redis和Dynamo。

· 文档数据库:数据存储在文档中,而不是行和列。 文档被分组以形成一个集合。 这种数据库的优点之一是每个文档可以具有不同的结构。 这种数据库对于内容管理和存储用户个人资料非常有用。 示例:CouchDB和MongoDB。

· 宽列数据库:宽列数据库中的列和表的概念与关系数据库中的概念不同。 例如,在宽列数据库中,数据被非规范化,列根本没有固定,它们可以随时更改。 例如,我们可以在应用程序中动态添加列,甚至同一表中的行可以具有不同的列的情况也是如此。 与文档数据库一样,此处的值可以是复杂的结构,例如数组和列表。 这种数据库对于时间序列数据,日志记录和其他大量写入应用程序非常有用。 示例:Cassandra和HBase。

· 图形数据库:在图形中可以更好地表示关系的应用程序,这些数据库在那里非常有用。 这些类型的数据库主要用于社交网络,知识图等。例如:Neo4J。

关系数据库和NoSQL这两个数据库在数据管理方面都很棒。 没有简单的答案哪个更好。 这完全取决于帮助人们根据上述参数及其权衡选择的要求。