天天看点

非关系型数据库NoSQL

NoSQL(not only sql)非关系型数据库

一、关系型数据库与非关系型数据库对比:

常见的关系型数据库:MySQL、Oracle、SqlServer

关系型数据库涉及联合查询(join),数据量大的时候查询会锁表变慢

NoSQL数据之间无关系,可以随意扩展

NoSQL数据存储简单,而且可以存在内存中,所以读写速度非常快,即使数据量很大也很快

NoSQL不需要建立表、字段等数据,他可以随时存储自定义的格式,而关系型数据库增、改字段非常麻烦,尤其是数据量非常大的情况下,就更麻烦

二、常见的NoSQL有哪几种?

键值(Key-Value)数据库 产品:redis、memcached、riak,redis/memcached 属于键值(Key-Value)数据库,适合存储用户信息,比如会话、配置文件、参数、购物车等等,这些信息一般都和ID(键)挂钩,这种情况下,键值数据库是个很好的选择

三台web,用户登录时候任何一台,登录信息保存在redis或者memcached中,再次登录web2,不需要验证登录,完成session保持

面向文档(Document-Oriented)数据库,产品:MongoDB、CouchDB、RavenDB

MongoDB属于文档(Document-Oriented)数据库,将数据以文档的方式存储,每个文档都是一系列数据库的集合。每个数据项都有一个名称与对应的值,值既可以是建档的数据类型,如字符串,数字和日期等;也可以是复杂的类型,如有序的表和关联对象。数据存储的最小单位是文档。

列存储(wide column store/Column-Family)数据库 产品:Cassandra\Hbase

图(Graph-Oriented)数据库 产品:Neo4J、Infinite Graph、OrientDB

三、memcached介绍

memcached是通过缓存数据库查询结果,减少数据库访问次数,从而提高动态web站点性能,官方站点http://memcached.org/

基于C/S(服务端客户端)架构,协议简单

基于libevent架构的事件处理

自主内存存储处理(slab allowcation)

数据过期方式:lazy Expiration 和 LRU

memcached数据流向

非关系型数据库NoSQL

Slab Allocation的原理——将分配的内存分割成各个尺寸的快(chunk),并把尺寸相同的快分成组(chunk的集合),每个chunk的集合被称为Slab

memcached的内存分配一Page为单位,Page默认值为1M,可以在启动时通过-l参数来指定

Slab是由多个Page组成的,Page按照指定大小切割成多个chunk,其机构如下图:

大小关系可以这样理解: slab>page>chunk

非关系型数据库NoSQL

Memcached数据过期方式

Lazy Expiration

memcached内部不会监视是否过期,而是在get时候查看记录的时间戳,检查记录是否过期。这种技术被称为lazy(惰性)expiration。因此,memcached不会在过期监视上耗费CPU时间