python html5 bootstrap 视频教程
德云社区 门户 行业资讯 行业标准 IT 标准 查看内容

NoSQL 的特性及与关系型数据库的比较

2014-12-14 14:19| 发布者: digitser| 查看: 5685| 评论: 2|原作者: liangsheng

摘要: NoSQL 的特性及与关系型数据库的比较 在过去,关系型数据库一直是数据持久化的唯一选择,数据工作者考虑的也只是在这些传统数据库中做筛选,譬如:SQL Server、Oracle、MySQL、PostgreSQL。甚至是做一些默认的选 ...
AI人工智能 语音助理 人工翻译 教程
NoSQL 的特性及与关系型数据库的比较

       在过去,关系型数据库一直是数据持久化的唯一选择,数据工作者考虑的也只是在这些传统数据库中做筛选,譬如:SQL Server、Oracle、MySQL、PostgreSQL。甚至是做一些默认的选择,比如:使用 .NET 的一般会选择 SQL Server;使用 Java 的可能偏向 Oracle,Ruby 一般是 MySQL,Python 则会是 PostgreSQL 或 MySQL 等等。

原因很简单:
       过去很长一段时间内,关系数据库的健壮性已经在多数应用程序中得到证实。我们可以使用这些传统数据库良好的控制并发操作、事务等等。然而,如果传统关系型数据库一直这么可靠,那么,还要 NoSQL 干什么?NoSQL 之所以生存并得到发展,是因为它做到了传统关系型数据库做不到的事!

关系型数据库中存在的问题:
2.jpg

1、Impedance Mismatch (阻抗不匹配)
      我们使用 Python、Ruby、Java、.Net 等语言编写应用程序时,这些语言有一共同特性 —— 面向对象。但当我们使用 MySQL、PostgreSQL、Oracle 以及 SQL Server 时,这些数据库同样有一共同特性 —— 关系型数据库。这里就牵扯到了 “Impedance Mismatch” 这个术语:存储结构是面向对象的,但是数据库却是关系的,所以在每次存储或者查询数据时,我们都需要做转换。类似Hibernate、Entity Framework 这样的 ORM 框架确实可以简化这个过程,但是在对查询有高性能需求时,这些 ORM 框架就捉襟见肘了。

2、应用程序规模变得越来越大
     网络应用程序的规模日渐变大,我们需要储存更多的数据、服务更多的用户以及需求更多的计算能力。为了应对这种情形,我们需要不停的扩展。扩展分为两类:
            一种是纵向扩展,即购买更好的机器,更多的磁盘、更多的内存等等;
            另一种是横向扩展,即购买更多的机器组成集群。

     在巨大的规模下,纵向扩展发挥的作用并不是很大。首先单机器性能提升需要巨额的开销并且有着性能的上限,在Google 和 Facebook 这种规模下,永远不可能使用一台机器支撑所有的负载。鉴于这种情况,我们需要新的数据库;因为,关系数据库并不能很好的运行在集群上。不错,也可能会去搭建关系数据库集群,但是他们使用的是共享存储,这并不是我们想要的类型。于是就有了以 Google、Facebook、Amazon (亚马逊) 这些试图处理更多传输所引领的 NoSQL 纪元。

NoSQL 纪元时代来临
       当下已经存在很多的 NoSQL 数据库,比如 MongoDB、Redis、Riak、HBase、Cassandra 等等。每一个都拥有以下几个特性中的一个:
              1、不再使用 SQL 语言,譬如:MongoDB、Cassandra 就有自己的查询语言;
              2、通常是开源项目;
              3、为集群运行而生;
              4、弱结构化 —— 不会严格限制数据结构类型。

NoSQL 数据库类型:
       NoSQL 可以大体上分为 4 个种类:Key-value (键 - 值)、Document-Oriented (面向 - 文档)、Column-Family Databases (列 - 存储数据库) 以及 Graph-Oriented Databases (面向 - 图形数据库)。

下面就来说说这些类型的特性:

一、 键值(Key-Value)数据库
        键值数据库就像在传统语言中使用的哈希表。你可以通过 key 来添加、查询或者删除数据,鉴于使用主键访问,所以会获得不错的性能及扩展性。

        产品:
               Riak、Redis、Memcached、Amazon’s Dynamo、Project Voldemort

       有谁在使用:
              GitHub (Riak)、BestBuy (Riak)、Twitter (Redis和Memcached)、StackOverFlow    (Redis)、 Instagram (Redis)、Youtube (Memcached)、Wikipedia(Memcached)

       适用场景:

              储存用户信息,比如:会话、配置文件、参数、购物车等等。这些信息一般都和 ID(键)挂钩,这种情景下键值数据库是个很好的选择。

       不适用场景:
              1. 取代通过键查询,而是通过值来查询。Key-Value 数据库中根本没有通过值查询的途径。
              2. 需要储存数据之间的关系。在 Key-Value 数据库中不能通过两个或以上的键来关联数据。
              3. 事务的支持。在 Key-Value 数据库中故障产生时不可以进行回滚。

二、 面向文档(Document-Oriented)数据库
        面向文档数据库会将数据以文档的形式储存。每个文档都是自包含的数据单元,是一系列数据项的集合。每个数据项都有一个名称与对应的值,值既可以是简单的数据类型,譬如:字符串、数字、日期等;也可以是复杂的类型,譬如:有序列表和关联对象。数据存储的最小单位是文档,同一个表中存储的文档属性可以是不同的,数据可以使用 XML、JSON 或者 JSONB 等多种形式存储。

        产品:
               MongoDB、CouchDB、RavenDB

        有谁在使用:
               SAP (MongoDB)、Codecademy (MongoDB)、Foursquare (MongoDB)、NBC    News (RavenDB)

        适用场景:
               1、日志。企业环境下,每个应用程序都有不同的日志信息。Document-Oriented 数据库并没有固定的模式,所以我们可以使用它储存不同的信息。
               2、分析。鉴于它的弱模式结构,不改变模式下就可以储存不同的度量方法及添加新的度量。

        不适用场景:
               在不同的文档上添加事务。Document-Oriented 数据库并不支持文档间的事务,如果对这方面有需求则不应该选用这个解决方案。

三、 列存储(Wide Column Store/Column-Family)数据库
        列存储数据库将数据储存在列族(column family)中,一个列族存储经常被一起查询的相关数据。譬如:如果我们有一 Person 类,我们通常会一起查询他们的姓名和年龄而不是薪资。这种情况下,姓名和年龄就会被放入一个列族中,而薪资则在另一个列族中。

        产品:
               Cassandra、HBase

         有谁在使用:
               Ebay (Cassandra)、Instagram (Cassandra)、NASA (Cassandra)、Twitter    (Cassandra and HBase)、Facebook (HBase)、Yahoo!(HBase)

        适用场景
              1. 日志。因为我们可以将数据储存在不同的列中,每个应用程序可以将信息写入自己的列族中。
              2. 博客平台。我们储存每个信息到不同的列族中。譬如:标签可以储存在一列,类别可以储存在一列,而文章则储存在另一列。

        不适用场景:
               1. 如果我们需要 ACID 事务。Vassandra 就不支持事务。
               2. 原型设计。如果我们分析 Cassandra 的数据结构,我们就会发现结构是基于我们期望的数据查询方式而定。在模型设计之初,我们根本不可能去预测它的查询方式,而一旦查询方式改变,我们就必须重新设计列族。

四、 图形(Graph-Oriented)数据库
        图形数据库允许我们将数据以图形方式储存。实体会被作为顶点,而实体之间的关系则会被作为边。譬如:有三个实体,Steve Jobs、Apple 和 Next,则会有两个 “Founded by” 的边将 Apple 和 Next 连接到 Steve Jobs。

        产品:
               Neo4J、Infinite Graph、OrientDB

        有谁在使用:
              Adobe (Neo4J)、Cisco (Neo4J)、T-Mobile (Neo4J)

        适用场景
               1. 在一些关系性强的数据中。
               2. 推荐引擎。如果我们将数据以图形的形式表现,那么,将会非常有益于推荐的制定。

        不适用场景
               不适合的数据模型。图数据库的适用范围很小,因为很少有操作涉及到整个图。

版权声明:
本文由 德云社区 整理,原文来自网络。

路过

雷人

握手

鲜花

鸡蛋

相关阅读

发表评论

最新评论

引用 liangsheng 2014-12-14 13:30
SQL Server, PostgreSQL, MySQL, NoSQL, 关系型数据库
引用 liangsheng 2014-12-14 13:30
SQL Server, PostgreSQL, MySQL, NoSQL, 关系型数据库

查看全部评论(2)

业务范围:

Linux 云计算 IaaS SaaS 服务器架设 开发 部署 维护

高仿真低成本,可动画 VR 5D 数字样机建模 开发 规划

内外部效率优化 APP 定制 IT 外包,数据管理 分析 挖据

标准 非标设备全流程研发,PLC 单片机 工控系统开发集成

微信智能互动营销策划,Web 网站代码 SEO 排名优化,大数据网络推广

文档 网页多语种翻译,数据资料标准化版本化 数字化管理的规划 研发 实施

跨平台 硬件 浏览器 HTML5 Web 电子商务平台 静态动态网站开发 部署 维护

Linux Windows 平台内外网 PLM ERP 数字化系统 服务器架设 开发 部署 维护
PySide1.2 2.x PyQt4 的 QComboBox.currentTextChanged 信号无响应解决办法
PySide1.2 2.x PyQt4 的 QComboBox.currentTextChanged 信号无响应解决办法 在 PySide1.2 PySide2.x PyQt4 中,使用 QComboBox.currentTextChanged 信号有时会无响应,如下[21/2020-06-29]
OpenCV 4.x 官方文档编制 中文教程 全人工翻译 中文在线手册
OpenCV 4.x 官方文档编制 中文教程 全人工翻译 中文在线手册 以后不再上传 en-US 官方原版文档编制,目前上传的最新 zh-CN 人工翻译版本为 OpenCV 4.2.0。 OpenCV 4.2.0 [71/2020-06-15]
OpenCV 4.x 官方文档编制 中文教程 全人工翻译 更新日志
OpenCV 4.x 官方文档编制 中文教程 全人工翻译 更新日志 最近把网页背景由白色改为黑色,保护视力,不再上传 en-US 官方原版文档编制,目前上传的最新 zh-CN 人工翻译版本[27/2020-06-15]
CMake 3.x 官方文档编制 中文手册 全人工翻译 更新日志
CMake 3.x 官方文档编制 中文手册 全人工翻译 更新日志 最近把网页背景由白色改为黑色,保护视力,不再上传 en-US 官方原版文档编制,目前上传的最新 zh-CN 人工翻译版本为[23/2020-06-15]
CMake 3.x 官方文档编制 中文教程 全人工翻译 中文在线手册
CMake 3.x 官方文档编制 中文教程 全人工翻译 中文在线手册 以后不再上传 en-US 官方原版文档编制,目前上传的最新 zh-CN 人工翻译版本为 CMake 3.14。 CMake 3.14 中文文[27/2020-06-15]
多功能 高效快速 批处理式 文档翻译工具 人工翻译 手动翻译
多功能 高效快速 批处理式 文档翻译工具 人工翻译 手动翻译 文档翻译及 GUI 翻译,经常需要反复修改及快速重建。若想满足这些要求,批处理技术是最佳选择。 软件开发人员在[30/2020-06-15]
OpenCV ── 以图像处理 算法为主的跨平台开源计算机视觉库
OpenCV ── 以图像处理 算法为主的跨平台开源计算机视觉库 OpenCV 的全称 Open Source Computer Vision Library,又名 “开源计算机视觉库”。OpenCV 是一个开源发行的跨[56/2020-06-15]
数字 IDE -- 全栈软件工程师编程 多功能高效 批处理式 IDE
数字 IDE -- 全栈软件工程师编程 多功能高效 批处理式 IDE 由于所有编程语言,源代码的主要表达形式仍是文本。 而文本在数字化 批处理化方面天然优势明显,如标准统一 (虽[26/2020-06-06]
多功能高效 批处理式 Python IDE Python 编辑器 新时代新理念
多功能高效 批处理式 Python IDE Python 编辑器 新时代新理念 计算机被发明以来,IDE 理念从最初的文本式,到后来的带图形界面式,再是图形可交互式,之后再无突破 (虽然有[106/2020-06-06]
CEO首席执行官 CFO首席财务官 COO首席运营官 CTO首席技术官
CEO首席执行官 CFO首席财务官 COO首席运营官 CTO首席技术官 CEO首席执行官 CEO 是 Chief Executive Officer 的缩写,中文译为首席执行官。 CEO 是在一个企业中负责日常事[58/2020-06-04]

Archiver|Sitemap|小黑屋|德云社区   

GMT+8, 2020-7-11 03:12 , Processed in 0.026487 second(s), 29 queries .

工业和信息化部: 粤ICP备14079481号-2

技术支持 乐数软件     版权所有 © 2014-2021 德云社区    

返回顶部