非关系型数据库NoSQL
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了非关系型数据库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数据流向
Slab Allocation的原理——将分配的内存分割成各个尺寸的快(chunk),并把尺寸相同的快分成组(chunk的集合),每个chunk的集合被称为Slab
memcached的内存分配一Page为单位,Page默认值为1M,可以在启动时通过-l参数来指定
Slab是由多个Page组成的,Page按照指定大小切割成多个chunk,其机构如下图:
大小关系可以这样理解: slab>page>chunk
Memcached数据过期方式
Lazy Expiration
memcached内部不会监视是否过期,而是在get时候查看记录的时间戳,检查记录是否过期。这种技术被称为lazy(惰性)expiration。因此,memcached不会在过期监视上耗费CPU时间
LRU
memcached会优先使用已经超时的记录空间,但即使如此,也会发生追加新纪录时空间不足的情况,此时就要使用名称为Least Recently Used(LRU)机制来分配空间。顾名思义,这是删除“最近最少使用”的记录的机制。因此,当空间不足时候(无法从slab class上获取到新的空间时候),就从最近未被使用的记录中搜索,并将其空间分配给新的记录。从缓存的实用角度来看,该模型十分理想。
本文出自 “梅花香自苦寒来!” 博客,请务必保留此出处http://daixuan.blog.51cto.com/5426657/1746447
以上是关于非关系型数据库NoSQL的主要内容,如果未能解决你的问题,请参考以下文章