Key-Value键值存储原理初识(NOSQL)

NO-Sql数据库:Not Only不单单是SQL数据库

定义:非关系型数据库;NoSQL用于超大规模数据的存储。(例如谷歌或Facebook天天为他们的用户收集万亿比特的数据)。这些类型的数据存储不须要固定的模式,无需多余操做就能够横向扩展。须要进一步数据挖掘和分析。json

RDBMS VS NOSQL性能

RDBMS NoSQL
高度组织化结构化数据  表明着不单单是SQL
结构化查询语言(SQL) (SQL)  没有声明性查询语言
数据和关系都存储在单独的表中 没有预约义的模式
数据操纵语言,数据定义语言  键 - 值对存储,列存储,文档存储,图形数据库
严格的一致性 最终一致性,而非ACID属性
基础事务 非结构化和不可预知的数据
 

CAP定理spa

 

高性能,高可用性和可伸缩性设计

 




 

 

 

 

 

对可用性及一致性的弱要求原则:BASExml

  • Basically Availble --基本可用
  • Soft-state --软状态/柔性事务。 "Soft state" 能够理解为"无链接"的, 而 "Hard state" 是"面向链接"的
  • Eventual Consistency --最终一致性 最终一致性, 也是是 ACID 的最终目的。

 

NoSQL 数据库分类

类型

 

部分表明对象

 

特色
列存储

Hbase索引

Cassandra事务

Hypertable文档

顾名思义,是按列存储数据的。最大的特色是方便存储结构化和半结构化数据,方便作数据压缩,对针对某一列或者某几列的查询有很是大的IO优点。

文档存储

MongoDB

CouchDB

文档存储通常用相似json的格式存储,存储的内容是文档型的。这样也就有有机会对某些字段创建索引,实现关系数据库的某些功能。

key-value存储

Tokyo Cabinet / Tyrant

Berkeley DB

MemcacheDB

Redis

能够经过key快速查询到其value。通常来讲,存储无论value的格式,照单全收。(Redis包含了其余功能)

图存储

Neo4J

FlockDB

图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,并且设计使用不方便。

对象存储

db4o

Versant

经过相似面向对象语言的语法操做数据库,经过对象的方式存取数据。

xml数据库

Berkeley DB XML

BaseX

高效的存储XML数据,并支持XML的内部查询语法,好比XQuery,Xpath。

 

Key-Value存储:(基于Redis)

传统的关系型数据库,处理一对多的问题,须要把外键放在多的一端,由于RDBMS理论中没有集合这个概念。而使用Redis,咱们能够在一端来管理一对多的关系,使用Set。

若是使用MySQL,当数据规模很是大时,上面两个查询操做都须要借助表关联技术,而大表间的join在大型系统中是须要极力避免的操做。相反Redis的每一个操做都会局限在一个较小的数据集范围内,并且key-value的存储形式,定位key只是一个复杂度为O(1)的操做。在very huge的数据量下,Redis性能效果很是优异,这就是NoSQL的优点所在!

相关文章
相关标签/搜索