为什么企业依赖于 NoSQL
如果你关注大数据科技动向,你对 NoSQL 一定不陌生,NoSQL 是一个分布式数据库。在过去时间,数据存储一直关系型数据库天下,有着良好的控制并发操作、事务功能。虽然RDBMS很优秀,但是随着时间的推移就出现了两个关系数据库解决不了的问题:快速增长的数据规模和日渐复杂的数据模型。结果,我们看到了 NoSQL 数据库的兴起。

一、关系数据库不足
实际上,从 1979 年 Oracle 发布了第一个版本,这些数据库被设计为在单个服务器上运行,并且越大越好。而且增加这些数据库容量的唯一方法是升级服务器处理器、内存和存储,数据存储代价不断升高。随着互联网的数据呈指数级增长和 Web 应用程序的兴起,数据模型日渐复杂,关系数据库难以支撑,NoSQL 数据库也由此孕育而生。在 2006 年谷歌发布了 Bigtable 研究论文,在 2007 年亚马逊发布了 Dynamo 研究论文。而这些新的数据库旨在满足新一代企业要求:需要敏捷开发并支持任意规模运作。
二、敏捷开发
当今是以体验为中心的数字经济,企业如何保持竞争力,那么必须进行创新。由于这项创新的核心是现代 Web、移动和物联网应用程序的开发,因此开发人员必须高频提供应用程序和服务。速度和敏捷性都至关重要,因为这些应用程序的发展速度远远超过 ERP 等传统应用程序。而关系数据库是却不能很好满足于它,因为它们的固定数据模型不能很好地支持敏捷开发。
敏捷开发的核心原则是适应不断变化的应用程序需求:当需求发生变化时,数据模型也会发生变化,这是关系数据库的难以克服的问题,因为关系数据库的模型是固定的,并预先定义好的。因此,当要更改数据模型,开发人员不得不修改当初设定好的数据库结构,以适应新的需求。这会减慢或停止开发,不仅因为它是一个手动,耗时的过程,而且还会影响其他应用程序和服务。

相比之下,NoSQL 文档 数据库完全完美支持这点,因为它是无模式的,没有强制定义数据必须建模。相反,它遵循应用程序和服务。使用 NoSQL,数据模型由应用程序模型定义。应用程序和服务将数据建模作为对象。

三、如何支持任意规模运作
为了支持以指数增长的用户和数据 - 数百到数千到数百万用户,以及千兆字节到数TB的数据操作,应用程序和服务不得不进行扩展以保持性能,并且必须有效地运行。
对于扩展关系数据库而言,这是一个问题,例如,使用 Oracle ,使用 RAC 技术进行扩展就需要大量组件,昂贵且不完全可靠。因此,有效扩展和按需扩展的能力是一项挑战。它会变得越来越昂贵,因为必须购买更大更强的服务器以容纳更多用户和更多数据。此外,如果必须使数据库脱机以执行硬件升级,则可能导致停机。
然而,分布式 NoSQL 数据库利用廉价硬件进行扩展, 只需添加更多服务器即可添加更多资源。扩展能力使企业能够通过以下方式更有效地扩展:
1、不需要为满足部署而买相对称的硬件
2、利用较便宜的硬件进行拓展;
3、按需扩展,无需停机。

四、NoSQL 常见存储方式
NoSQL 常见有三种存储方式:键值存储、面向文档的数据库和面向列的数据库。接下来说明这几种存储方式以及数据库代表。

键值存储
代表:Redis、memcached
键值存储是 NoSQL 最常见存储方式,通过 key-value 形式保存数据,高速访问数据。而且根据保存时效也分为临时性、永久性和两者兼备。
面向文档的数据库
代表:MongoDB、CouchDB
面向文档的数据库数据结构要求不是很严格,不定义表结构而且可以使用复杂的查询条件
面向列的数据库
代表:HBase
面向列的数据库以列为单位进行存储,这里的列式存储其实说的是列族存储,它将数据表存储为数据列而非行的形式。列族存储优势:快速查询,易拓展,但功能相对局限。
五、NoSQL 对于事务的支持?
在这里有一个误区,由于分布式事务需要分布式协作,所以似乎必须在性能可扩展性和分布式事务支持之间进行权衡。
耶鲁大学的一名副教授 Daniel Abadi 认为这个想法是错的,可拓展的分布式系统也是可以实现事物。他提出了一个新的权衡策略,具体是在公平性、隔离性和吞吐量(FIT)三者之间进行取舍。
换句话说,有两种方法构建出具备分布式事务吞吐量的可扩展系统:
1、放弃隔离性
当放弃隔离性,一个事物是不会跟其他事物有冲突,就无需等待协作就可以完成了。而且也有一类数据约束可以确保在弱隔离下正确性。
2、放弃公平性
通过设定分布式协作的顺序最小化两者之间的时间重叠,从而减轻二者之间的相互影响,在此公平下找到最合适时间进行协作。
六、小结
构建和运行这些大规模交互式应用程序创建了一组新的技术要求。新的技术架构需要比以往更加灵活,并且需要一种能够适应前所未有的规模、速度和数据可变性的实时数据管理方法。关系数据库无法满足这些新要求,这就使得 NoSQL 逐渐流行起来。
为什么企业依赖于 NoSQL的更多相关文章
- 译:为什么使用 NoSQL 数据库
原文链接:Why NoSQL Database? 向数据时代的转变正在推动 NoSQL 随着各行各业朝着数据时代转变,商业世界正在经历巨大的变革.这是由互联网以及其他二十一世纪新技术--云计算.移动应 ...
- SQL与NoSQL(关系型与非关系型)数据库的区别
永远正确的经典答案依然是:具体问题具体分析. 数据表VS.数据集 关系型和非关系型数据库的主要差异是数据存储的方式.关系型数据天然就是表格式的,因此存储在数据表的行和列中.数据表可以彼此关联协作存储, ...
- SQL VS NoSQL
(关系型与非关系型)数据库的区别: 关系型和非关系型数据库的主要差异是数据存储的方式 1.1 数据表 VS 数据集 关系型数据天然就是表格式的,因此存储在数据表的行和列中.数据表可以彼此关联协作存储, ...
- MongoDB自学笔记1----1.1 NoSQL是什么?
第一章 走进MongoDB 1.1NoSQL是什么? 1.1.1NoSQL简介 对于不了解NoSQL的人都会认为NoSQL为No SQL,即不是SQL.但是这种理解是错误的, ...
- Aerospike | Aerospike Chinese
Aerospike | Aerospike Chinese 如果您的企业依赖于: 庞大的数据量(超过任何结构化数据库所能处理的数据量) 可预见(且快速)的性能 透明的扩展 始终正常运行 那么您只有一个 ...
- 关于Mongodb的全面总结
MongoDB的内部构造<MongoDB The Definitive Guide> MongoDB的官方文档基本是how to do的介绍,而关于how it worked却少之又少,本 ...
- 从技术 Leader 的招聘需求看,如何转岗为当前紧缺的大数据相关人才?
前段时间,跟候选人聊天的时候,一个有多年工作经验的资深 iOS 工程师告诉我,他最近正在学习 Machine Learning 相关的知识.他觉得,对于程序员来说,技术进步大大超过世人的想象,如果你不 ...
- Apache Sqoop - Overview——Sqoop 概述
Apache Sqoop - Overview Apache Sqoop 概述 使用Hadoop来分析和处理数据需要将数据加载到集群中并且将它和企业生产数据库中的其他数据进行结合处理.从生产系统加载大 ...
- Scala教程
Scala表示可扩展性语言,是一种混合函数式编程语言.它是由Martin Odersky创建,并于2003年首次发布. Scala平滑地集成面向对象和函数式语言的特点,并且Scala被编译在Java虚 ...
随机推荐
- 使用Callable和Future接口创建线程
具体是创建Callable接口的实现类,并实现clall()方法.并使用FutureTask类来包装Callable实现类的对象,且以此FutureTask对象作为Thread对象的target来创建 ...
- maven 生命周期、生命周期阶段、插件、目标
生命周期maven的生命周期是抽象的,它本身不做任何实际的工作.实际的工作都由插件来完成.生命周期好比接口,插件好比实现类.maven 有三个独立的生命周期,clean.default.site. 生 ...
- CSS 小结笔记之选择器
Css选择器主要分为以下几类 类选择器 ID选择器 通配符选择器 标签选择器 伪类选择器 复合选择器 1.类选择器:通过.classname 来选择 例如 .color2 { color: rebec ...
- kvm 启动libvirtd时出现错误
kvm 启动libvirtd市出现错误: /etc/init.d/libvirtd start启动 libvirtd 守护进程:libvirtd: relocation error: libvirtd ...
- scrapy实战--登陆人人网爬取个人信息
今天把scrapy的文档研究了一下,感觉有点手痒,就写点东西留点念想吧,也做为备忘录.随意写写,看到的朋友觉得不好,不要喷我哈. 创建scrapy工程 cd C:\Spider_dev\app\scr ...
- 用jQuery Validate+layer插件实现好看的表单提交效果
作为初学者,以前做表单验证都是自己写的,目的是让自己更好的了解代码,加深自己对javascript的理解,但是其实在很久都知道有一个很好用的表单验证插件:jQuery Validate.js,一直都没 ...
- MySQL学习分享--Thread pool实现
基于<MySQL学习分享--Thread pool>对Thread pool架构设计的详细了解,本文主要对Thread pool的实现进行分析,并根据Mariadb和Percona提供的开 ...
- [翻译] DBCamera 轻量级定制摄像头
DBCamera 轻量级定制摄像头 https://github.com/danielebogo/DBCamera DBCamera is a simple custom camera with AV ...
- Java问题汇总(一) ----------2019/2/22
第一次写,就弄弄简单样式
- 我的Java之旅——第一个Java程序
在简单的看了一点Java的基本内容后,我开始尝试写自己的第一个Java程序.由于某些原因,学校官方的教务APP看不了自己这学期的平均绩点,就想着自己动手,写一小段代码,算一下自己的平均绩点.程序的功能 ...