NoSQL数据库

引言

NoSQL(Not Only Sql),泛指非关系型的数据库。

背景:随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模,超大流量以及高并发的时候得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。

NoSQL与关系型数据库的比较

比较关系型数据库NoSQL
存储方式表格式(行和列),便于关联协作存储和数据提取存储在数据集,如文档、键值对或者图结构
存储结构预定义了结构(列的定义:确定数据的形式和内容),具有可靠性和稳定性但是难以修改动态结构,易于适应数据类型和结构的变化
存储规范高规范性,分割细化数据到关系表,以避免重复和获得精简的空间,数据管理逻辑清晰但是操作麻烦存储成了一个整体,数据存储可能重复,但整块数据更加便于读写
存储扩展纵向扩展(想要提高处理能力,要使用速度更快的计算机)横向扩展(存储是分布式的,可以通过给资源池添加更多的普通数据库服务器来分担负载)
查询方式结构化查询语言来操作数据库(SQL:CURD),预定义优化方式(如索引)加快查询以块为单元操作数据非结构化查询语言(UnQl),无标准,基于更简单更精确的数据访问模式优化查询
事务ACID规则(原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)),对事务支持性更强BASE原则(基本可用(Basically Availble)、软/柔性事务(Soft-state )、最终一致性(Eventual Consistency))
性能数据一致性强,读写性能比较差。高并发读写性能非常差,海量数据处理效率非常低无需sql的解析,提高了读写性能。
常用数据库SQL Server,Mysql,Oracleredis,memcache,MongoDb
授权方式大部分付费大部分开源

总的来说,Nosql相比于传统的关系性数据库来说,具有高效集群、不使用关系模型、开源、易扩展和灵活的数据模型等优点。

Compose.io 的开发者 DJ Walker-Morgan 也说过:“NoSQL 就像我购买营养食品去减肥一样,负责的是控制,必须有严格的纪律和谨慎的管理才适用”。

所以说关系型数据库还是主流,Nosql目前来说主要是作为超大规模,超大流量以及高并发情景下的解决方案。也许不久的将来,Nosql会越来越完善,向事务支持和大规模高并发两极发展,而关系型数据库也将在保证稳定性安全性的同时针对大规模和高并发找到一些更有效的解决方案。可以说Nosql的高速发展,促进了数据库行业的高效快速发展。(就目前所持认知的想法,不知道理解的对不对)

分类

Nosql可以分为键值(Key-Value)存储数据库、列存储数据库和图形(Graph)数据库四种数据库。

分类例子典型应用场景数据模型优点缺点
键值存储数据库Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等。Key 指向 Value 的键值对,通常用hash table来实现查找速度快数据无结构化,通常只被当作字符串或者二进制数据
列存储数据库Cassandra, HBase, Riak分布式的文件系统以列簇式存储,将同一列数据存在一起查找速度快,可扩展性强,更容易进行分布式扩展功能相对局限
文档型数据库CouchDB, MongoDbWeb应用(与Key-Value类似,Value是结构化的,不同的是数据库能够了解Value的内容)Key-Value对应的键值对,Value为结构化数据数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构查询性能不高,而且缺乏统一的查询语法。
图形数据库Neo4J, InfoGrid, Infinite Graph社交网络,推荐系统等。专注于构建关系图谱图结构利用图结构相关算法。比如最短路径寻址,N度关系查找等很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案。

键值(Key-Value)存储数据库

这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/value模型对于IT系统来说的优势在于简单、易部署。但是如果DBA只对部分值进行查询或更新的时候,Key/value就显得效率低下了。举例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB.

列存储数据库。

这部分数据库通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。如:Cassandra, HBase, Riak.

文档型数据库

文档型数据库的灵感是来自于Lotus Notes办公软件的,而且它同第一种键值存储相类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可 以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。如:CouchDB, MongoDb. 国内也有文档型数据库SequoiaDB,已经开源。

图形(Graph)数据库

图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。如:Neo4J, InfoGrid, Infinite Graph.
因此,我们总结NoSQL数据库在以下的这几种情况下比较适用:1、数据模型比较简单;2、需要灵活性更强的IT系统;3、对数据库性能要求较高;4、不需要高度的数据一致性;5、对于给定key,比较容易映射复杂值的环境。

参考:

  1. Nosql简介 Redis,Memchche,MongoDb的区别
  2. Nosql百度百科
  3. NoSQL 简介
  4. 关系型数据库与NoSQL的对比
  5. Nosql 理解篇+实战篇 一 了解nosql
  6. NoSQL 没毛病,为什么 MySQL 还是“王”?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/242281.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在ti官网上找相关芯片的例程

在ti官网上找相关芯片的例程 先需要登录你的账号。 下载步骤

memcache、Redis与MongoDB的学习-1

除此接触这三个词的概念,对今天看的资料最了一些整理。 之前经常有看到memcache、Redis与MongoDB相关的数据库,最开始意味这些都只是用来做数据库优化的缓存工具,后来具体看了一些资料之后才发现,这些都是Nosql,下面是…

php数据库中数据查询

MySQL查询语句mysql_fetch_row,mysql_fetch_array,mysql_fetch_object,mysql_fetch_assoc 区别用法: mysql_fetch_row,这个函数是从结果集中取一行作为枚举数据,从和指定的结果标识关联的结果集中取得一行数据并作为数…

C#类的继承和修饰符

C#类的继承 继承是面向对象软件技术当中的一个概念,与多态、封装共为面向对象的三个基本特征。继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等。 所有的类都是直接或则简洁的继承object 修饰符 static构造方法

经典的卷积神经网络简介

引言本文主要用于对7个经典卷积神经网络的初识,大致了解各个网络提出的背景,以及各自对卷积神经网络发展的作用(即网络的特点)。 经典的卷积神经网络:LeNetAlexNetZF NetVGGGoogLeNetResNetDenseNet参考: C…

C#中的运算符和异常处理

C#中的运算符 运算符的声明 异常处理 try表示试图进行某件事 catch表示发送了某件异常时,进行某件事 finally最终进行某件事 抛出异常

C#中的程序成分总结

C#中的程序成分 编译预处理 程序的组织 名称空间 嵌套类型 程序集 语法小结 类型的声明 类的成员

iOS开发的学习笔记

引言之前做过半年的iOS开发,从完全不懂的移动开发的菜鸟,到完成前端UI开发的菜鸟,做的一些笔记,希望对大家有用,也希望这些总结的东西对以后会有作用。 开发环境iOS的系统框架分为四个层次:核心操作系统层&…

国际人工智能算法与应用研讨会(WASA 2018)参会笔记

从博士师兄那里知道就在天津高新区有这个会议,就跟着师兄报名了,下面是参会第一天的感想。 背景WASA是人工智能领域的国际性大型会议,也是中国计算机学会(CCF)推荐的会议。旨在为人工智能研究者、开发者和企业提供一个…

C#类型转换和常用类

C#类型转换 任何事物都是对象 表达式中的类型转换 强制类型装换 普通类型装换 基本类型 数与字符串的转换 常用类(类都有方法)

机器学习标签编码

二值编码独热编码定义 :One-Hot Encoding即One-Hot 编码,也称独热编码,又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候,其中只有…

c#数组和集合

c#数组和集合 数组 集合 遍历它 foreach只能取得元素,不能修改元素 另一个例子 遍历它

数据结构与算法(一)——排序

虽然之前学过数据结构,但是已时隔四年,大概四月份复习了一遍,但是很多概念也是一知半解,所以重新整理知识点和运行代码的方式来巩固知识。 引言排序:是计算机程序设计中的一种重要操作,功能是将一个数据元素…

PHP(四)——性能优化

之前基于PHP开发的过程中,一直没有涉及到PHP性能优化的问题,但是一般来说PHP性能问题占整个项目性能问题一般占30%-50%部分,所以说,这部分内容是非常重要的。下面是最近自己PHP性能优化学习的资料整理。 引言[1]PHP存在性能问题的…

C#常用的算法

C#常用的算法 遍试算法 迭代算法 递归 递归算法的基本思想:分而治之

kaggle使用笔记

因为参加了DCASE2018比赛的声学场景分类的子任务,这个比赛有个排行榜是用的kaggle来做的,所以在比赛中,用到过kaggle API,下面是关于kaggle的使用笔记。 kaggle 是什么?Kaggle是一个数据科学竞赛的平台,很多…

PHP简单功能的实现

检查一个变量是否为空empty功能返回值:若变量不存在则返回 TRUE若变量存在且其值为””、0、”0”、NULL、FALSE、 array()、var $var; 以及没有任何属性的对象,则返回 TURE若变量存在且值不为””、0、”0”、NULL、FALSE、 array()、var $var; 以及没有…

C#流和文件

C#流和文件 文件及文件夹管理 WinForm中的文件对话框 文件内容的读写 注册表操作

PHP操作MySQL数据库(连接、增删改操作)

MySQL 是跟 PHP 配套使用的最流行的开源数据库系统,我们知道MySQL是PHP的最佳搭档,下面是系统的总结PHP与MySQL联合使用的方法。主要是使用MySQL扩展,下面就通过归纳总结来提升。 MySQL概述MySQL 是一种在 Web 上使用的数据库系统。 MySQL 是…

互联网应届生四项职场生存技能

职场能力一:沟通力沟通力是职场最重要也是最基础的一项能力。 进入职场后,无论从事什么岗位都必然要用到沟通力这个能力项。沟通力有一个很重要的基石,就是尊重对方的时间。每一次沟通,双方其实都要投入很多时间和精力。只有懂得尊…