NoSQL,是Not Only SQL的缩写,可不是no SQL哦。
NoSQL目前被国内外的很多公司在应用:
新浪微博 | Redis |
BIgtable | |
Amazon | SimpleDB |
淘宝数据平台 | Tair |
视觉中国网站 | MongoDB |
youku运营数据中心 | MongoDB |
飞信空间 | HandlerSocket |
豆瓣 | BeansDB |
NoSQL数据库关注的是对数据高并发地读写和对海量数据的存储等,与关系型数据库相比,NoSQL数据库在结构和数据模型方面做“减法”,而在扩展和并发方面做了加法。
NoSQl的优点总结下来如下:
简单的扩展——谁用谁知道
快速的读写——(个人觉得不一定)
低廉的成本——大部分都是开源产品
灵活的数据结构——谁用谁知道
但是NoSQL仍然都或多或少存在很多缺点:
不提供对SQL的支持
支持的特性不够丰富
现有的产品不成熟,相对的
现在比较成熟的像MongoDB,Redis等。(Redis主要用来替换Memchached的缓存服务)
MongoDB是非关系型数据库,但是操作习惯介于关系型和非关系型之间。语法有一点类似与JS面向对象的查询语言,是一个面向集和的、模式自由的文档型数据库。(数据格式都是Key-value,像JS中的Json)
一个这样的“Json”在MongoDB里称为一个文档。所以MongoDB是一个文档型数据库。
MongoDB有以下几个特性:
面向集合(Collection-Oriented)
关系型和非关系型的数据模型从大到小的概念对应:
NoSQL数据库-----集合----文档(对应于Json对象)-----------Key-Value
RDB-------------------表-------记录-----------------------------------------字段
模式自由(schema-free):集合里面没有列和行的概念
型下面两个记录可以存在同一个集合里面:
{"name":"HappyBKs"}
{"age":1}
文档型(documents):
文档型指的是存储的数据是key-value对的集合,key是字符串,value可以是数据型集合里面的任意类型,包括数组和文档,每个文档相当于关系型数据库中的一条记录。
支持动态查询
支持完全索引,包括内部对象(唯一索引和普通索引同样支持)
支持高效的二进制的数据存储,包括大型对象(如视频、图片)
自动处理碎片
文件存储格式是BSON(一种JSON的扩展)。注意:是在存储的时候会将Json转为BSON
使用对象:
持久化的缓存层(如Redis)
高效的实时性
用于对象及JSON数据的存储
高伸缩的场景
大尺寸,低价值的数据存储
不适合场景:
要求高度事务性的系统。(因为不像关系型数据库那样支持ACID)
传统的商业只能应用
复杂多表查询