非关系型数据库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的主要内容,如果未能解决你的问题,请参考以下文章

关于NoSQL非关系型的数据库详解

为什么用NoSQL(非关系型数据库)?

NoSQL

Redis—非关系型数据库概述

Mysql,Oracle,Nosql非关系型数据库

数据库MongoDB入门笔记:NoSQL,非关系型数据库简介