码迷,mamicode.com
首页 > 数据库 > 详细

非关系型数据库NoSQL

时间:2016-03-02 07:13:40      阅读:330      评论:0      收藏:0      [点我收藏+]

标签:非关系型数据库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

标签:非关系型数据库nosql

原文地址:http://daixuan.blog.51cto.com/5426657/1746447

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!