NoSQL数据库浅析(一):Redis和Memcached

NoSQL(Not Only SQL),泛指非关系型数据库,它的出现告诉我们:适用关系型数据库的时候就使用关系型数据库,不适用的时候也没有必要非使用关系型数据库不可,可以考虑使用更加合适的数据存储。

NoSQL简介

关系型数据库的不足

关系型数据库的性能非常高,但是它毕竟是一个通用型的数据库,并不能完全适应所有的用途,具体来说它并不擅长以下处理:

- 大量数据的写入处理

- 为有数据更新的表做索引或表结构变更

- 字段不固定时应用

- 对简单查询需要快速返回结果的处理

这里逐一进行说明:

1. 大量数据的写入处理

  在数据读入方面,由复制产生的主从模式(数据的写入由主数据库负责,数据的读入由从数据库负责),可以比较简单的通过增加从数据库来实现规模化,但是在数据库的写入方面却不是这么简单,例如,考虑把主数据库从一台增加到俩台,做为互相关联复制的二元主数据库来使用,确实这样似乎可以把每台主数据库的负荷减少一半,但是更新处理会发生冲突(同样的数据在俩台服务器同时更新成其他值),可能会造成数据的不一致,为了避免这样的问题,就需要把对某个表的请求分别分配给合适的的主数据库来处理。

  另外也可以考虑把数据库分割开来,分别放在不同的数据库服务器上。数据库分割可以减少每台数据库服务器上的数据量,以便减少磁盘I/O处理,实现内存上的高速处理。但是这样做存储在不同服务器上的表之间就无法进行join处理。

  1. 为有数据更新的表做索引或表结构变更

      在使用关系型数据库时,为了加快查询速度需要创建索引,为了增加必要的字段就一定需要改变表结构。为了进行这些处理,需要对表进行共享锁定,这期间数据变更(更新,插入,删除)是无法进行的。如果为数据量比较大的表创建索引或者是变更其表结构,就可能会导致长时间内数据无法进行更新。

  2. 字段不固定时的应用

      如果字段不固定,在实际运用中每次都进行反复的表结构变更时非常痛苦的,也可以预先设定大量的预备字段,但这样的话很容易弄不清楚字段和数据的对应状态。

  3. 对简单查询需要快速返回结果的处理

      关系型数据库并不擅长对简单的查询快速返回结果,因为关系型数据库是使用SQL进行读取的,它需要对SQL语言进行解析,同时还有对表的的锁定和解锁这样的额外开销。若希望对简单查询进行高速处理,没有必要非用关系型数据库不可。

RDBMS和NoSQL的区别

RDBMS NoSQL
遵循ACID原则(原子性,一致性,独立性,持久性) BASE原则(基本可用,软状态/柔性事务,最终一致性)
结构化查询语言(SQL) 没有标准统一的查询语言
高度组织化结构化数据 非结构化和不可预知的数据
CAP定理

CAP定理

在计算机科学中, CAP定理(CAP theorem), 又被称作 布鲁尔定理(Brewer’s theorem), 它指出对于一个分布式计算系统来说,不可能同时满足以下三点:

- 一致性(Consistency) (所有节点在同一时间具有相同的数据)

- 可用性(Availability) (保证每个请求不管成功或者失败都有响应)

- 分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作)

CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。

因此,根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三大类:

- CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。

- CP - 满足一致性,分区容忍性的系统,通常性能不是特别高。

- AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。

NoSQL数据库分类

类型 部分代表 特点
列存储 Hbase
Cassandra
Hypertable
按列存储数据。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势
文档存储 MongoDB
CouchDB
文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有机会对某些字段建立索引,实现关系数据库的某些功能
key-value存储 Redis
MemcacheDB
可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收
图存储 Neo4J
FlockDB
图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用不方便
对象存储 db4o
Versant
通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据
xml数据库 BaseX 高效的存储XML数据,并支持XML的内部查询语法,比如XQuery,Xpath

Memcached

Memcached简介

Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。本质上,它是一个简洁的key-value存储系统。一般使用的目的是通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度,提高可扩展性。

Memcached特征

memcached的特征:

- 协议简单

memcached的服务器客户端通信使用简单的基于文本行的协议,因此,通过telnet也能在memcached上保存数据,取得数据。

  • 基于libevent的事件处理

    libevent是一个程序库,它将Linux的epoll,BSD类操作系统的kqueue等事件处理功能封装成统一的接口,即使对服务器的连接数增加,也能发挥O(1)的性能。因此memcached能在Linux,BSD等操作系统上发挥其高性能。

  • 内置内存存储方式

    memcached保存的数据都存储在内置的内存存储空间中,由于数据仅存在于内存中,因此重启memcached,重启操作系统会导致全部数据丢失。另外,内容容量达到指定值后,就会基于LRU(最近最少使用)算法自动删除不使用的缓存。

  • memcached不互相通信的分布式

    memcached尽管是分布式缓存服务器,但服务器端并没有分布式功能,各个memcached不会互相通信以共享信息。如何进行分布式,是由客户端来实现的。

    如上图所示,缓存的存储的一般流程为:当数据到达客户端,客户端实现的算法就会根据”键”来决定保存的memcached服务器,服务器选定后,命令它保存数据。取的时候也一样。客户端根据”键”选择服务器,同样使用之前的算法,这样就能保证读写都是相同的服务器了。

分布式方法

memcached的分布式方法主要有俩种:取模法和一致性hash算法。

  • 取模法

    取模法(余数计算分散法)的算法如下:

CRC($key)%N

该算法下,客户端首先根据key来计算CRC,然后结果对服务器数进行取模得到memcached服务器节点,这种方式有两个问题需要注意:

1. 当选择到的服务器无法连接的时候,一种解决办法是将尝试的连接次数加到key后面,然后重新进行hash,这种做法也叫rehash。

2. 第二个问题也是这种方法的致命的缺点,尽管余数计算分散发相当简单,数据分散也很优秀,当添加或者移除服务器的时候,缓存重组的代价相当大。

  • 一致性hash算法

    Consistent Hashing算法的描述如下:

    首先求出memcached服务器节点的哈希值,并将其分配到0-2^32的圆上,这个圆我们可以把它叫做值域,然后用同样的方法求出存储数据键的哈希值,并映射到圆上。然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器上,如果超过0-2^32仍找不到,就会保存在第一台memcached服务器上:

    如果新添加或移除一台机器,在consistent Hashing算法下会有什么影响。上图中假设有四个节点,我们再添加一个节点叫node5:

    node5被放在了node4与node2之间,本来映射到node2和node4之间的区域都会找到node4,当有node5的时候,node5和node4之间的还是找到node4,而node5和node2之间的此时会找到node5,因此当添加一台服务器的时候受影响的仅仅是node5和node2区间。

  • 优化的一致性hash算法

    可以看出使用consistent Hashing最大限度的抑制了键的重新分配,有的consistent Hashing的实现方式还采用了虚拟节点的思想。问题起源于使用一般hash函数的话,服务器的映射地点的分布非常不均匀,从而导致数据库访问倾斜,大量的key被映射到同一台服务器上。为了避免这个问题,引入了虚拟节点的机制,为每台服务器计算出多个hash值,每个值对应环上的一个节点位置,这种节点叫虚拟节点。而key的映射方式不变,就是多了层从虚拟节点再映射到物理机的过程。这种优化下尽管物理机很少的情况下,只要虚拟节点足够多,也能够使用得key分布的相对均匀。

Memcached的安装使用

Memcached安装

Memcached官方并未提供Windows平台安装包,这里我使用的是菜鸟教程提供的安装包:

64位系统 1.4.4版本:http://static.runoob.com/download/memcached-win64-1.4.4-14.zip

更多版本请参考Memcached安装

1. 解压下载的安装包到自定义目录。

2. 使用管理员权限运行一下命令进行安装:

E:\memcached>memcached.exe -d install

可设置如下参数:

-p 监听的端口,默认是11211

-l 连接的IP地址, 默认是本机

-d start 启动memcached服务

-d restart 重起memcached服务

-d stop|shutdown 关闭正在运行的memcached服务

-d install 安装memcached服务

-d uninstall 卸载memcached服务

-u 以的身份运行 (仅在以root运行的时候有效)

-m 最大内存使用,单位MB。默认64MB

-M 内存耗尽时返回错误,而不是删除项

-c 最大同时连接数,默认是1024

-f 块大小增长因子,默认是1.25

-n 最小分配空间,key+value+flags默认是48

-h 显示帮助

如:memcached -d install -l 127.0.0.1 -m 1024 -c 2048

  1. 使用以下命令来启动和关闭memcached服务:
E:\memcached>memcached.exe -d start

E:\memcached>memcached.exe -d stop

Memcached连接

通过telnet命令并指定主机IP和端口来连接Memcached服务,默认运行的主机为127.0.0.l,端口为11211:

telnet 127.0.0.1 11211

进入telnet窗口发现输入的字符无法显示,没关系,使用快捷键Ctrl+]就能显示出来了,然后输入set localecho回车启用本地回显,再按一次回车进入telnet新窗口。输入stats,查看memcached的状态:

Memcached存储命令

[command] key flags exptime bytes [noreply]
vlaue

参数说明如下

参数 说明
[command] set/add/replace/append/prepend
key 查找键值
flags 可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息 。
exptime 在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
bytes 在缓存中存储的字节数
noreply 可选,该参数告知服务器不需要返回数据
value 存储的值(始终位于第二行)

1. set 命令用于将 value存储在指定的 key中。

如果set的key已经存在,该命令可以更新该key所对应的原来的数据,也就是实现更新的作用。

set mykey 0 0 3
123
STORED

get mykey
VALUE mykey 0 3
123

END
  1. add 命令用于将 value存储在指定的 key 中。

    如果 add 的 key 已经存在,则不会更新数据,之前的值将仍然保持相同,并且将获得响应 NOT_STORED。

add mykey 0 0 3
456
NOT_STORED
add mykey2 0 0 4
abcd
STORED
get mykey2
VALUE mykey2 0 4
abcd
END
  1. replace 命令用于替换已存在的 key 的 value。

    如果 key 不存在,则替换失败,并且将获得响应 NOT_STORED。

replace mykey 0 900 3
456
STORED
get mykey
VALUE mykey 0 3
456
END
replace mykey3 0 0 3
123
NOT_STORED
  1. append 命令用于向已存在 key 的 value 后面追加数据,prepend 命令用于向已存在 key 的 value 前面追加数据.
set mykey 0 0 3
123
STORED
append mykey 0 0 4
abcd
STORED
prepend mykey 0 0 3
xyz
STORED
get mykey
VALUE mykey 0 10
xyz123abcd
END
  1. 删除缓存:delete key,清理所有缓存:flush_all [time] [noreply]

    更多指令请参考memcached指令

PHP连接Memcached服务

首先安装PHP Memcache扩展,运行phpinfo()查看PHP的版本信息,决定扩展文件版本:

http://windows.php.net/downloads/pecl/releases/memcache/3.0.8/ 下载正确版本的php_memcache.dll动态链接库文件 ,并放在php\ext目录下 。

编辑php.ini,添加下面一行代码到php.ini文件中。

extension=php_memcache.dll

在phpinfo中查看memcache扩展是否安装成功:

新建一个PHP文件用来测试:

<?php
$memcache = new Memcache;             //创建一个memcache对象
$memcache->connect(‘localhost‘, 11211) or die ("Could not connect"); //连接Memcached服务器
$memcache->set(‘key‘, ‘hello,测试memcache成功‘);        //设置一个变量到内存中,名称是key 值是test
$get_value = $memcache->get(‘key‘);   //从内存中取出key的值
echo $get_value;

Redis

Redis简介

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

Redis 与其他 key - value 缓存产品有以下三个特点:

- Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

- Redis支持数据的备份,即master-slave模式的数据备份。

Redis优势

  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  • 原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
  • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是, 相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。 同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

redis提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append Only File)。

RDB,简而言之,就是在不同的时间点,将Redis存储的数据生成快照并存储到磁盘等介质上;

AOF,则是换了一个角度来实现持久化,那就是将Redis执行过的所有写指令记录下来,在下次redis重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。

其实RDB和AOF两种方式也可以同时使用,在这种情况下,如果redis重启的话,则会优先采用AOF方式来进行数据恢复,这是因为AOF方式的数据恢复完整度更高。

如果你没有数据持久化的需求,也完全可以关闭RDB和AOF方式,这样的话,redis将变成一个纯内存数据库,就像memcache一样。

这里不做深究,详情持久化的方式可以参考Redis中文官网

Redis安装使用

Redis安装

Windows下安装的下载地址为https://github.com/MSOpenTech/redis/releases, 下载相应的压缩包解压重命名为redis。

cmd窗口运行redis-server.exe redis.windows.conf:

另开一个cmd窗口,之前的不要关闭,运行redis-cli.exe -h 127.0.0.1 -p 6379

设置键值对 set mykey 123,取出键值对 get mykey:

Redis数据类型及命令

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

- String(字符串)

string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。

string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。

string类型是Redis最基本的数据类型,一个键最大能存储512MB。

命令 行为
set key value 设置指定 key 的值
get key 获取指定 key 的值
del key 在 key 存在是删除 key(这个命令可以用于所有类型)
127.0.0.1:6379> set str_name "abc"
OK
127.0.0.1:6379> get str_name
"abc"
  • Hash(哈希)

    Redis hash 是一个键值对集合。

    Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。

    每个 hash 可以存储 2^32 - 1 键值对(40多亿)。

命令 行为
hset key field value 将哈希表 key 中的字段 field 的值设为 value
hmset key field1 value1 [field2 value2] 同时将多个 field-value (域-值)对设置到哈希表 key 中
hget key field 获取存储在哈希表中指定字段的值
hmget key field1 [field2] 获取所有给定字段的值
hgetall key 获取在哈希表中指定 key 的所有字段和值
hdel key field1 [field2] 删除一个或多个哈希表字段
127.0.0.1:6379> hmset hash_key name htdwade passwd 123456 addr abc
OK
127.0.0.1:6379> get hash_key
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> hgetall hash_key
1) "name"
2) "htdwade"
3) "passwd"
4) "123456"
5) "addr"
6) "abc"
  • List(列表)

    Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。

    列表最多可存储 2^32 - 1 元素 (4294967295, 每个列表可存储40多亿)。

命令 行为
lpush key value1 [value2] 将一个或多个值插入到列表头部
rpush key value1 [value2] 在列表中添加一个或多个值
lpop key 移出并获取列表的第一个元素
rpop key 移除并获取列表最后一个元素
lindex key index 通过索引获取列表中的元素
lrange key start stop 获取列表指定范围内的元素
127.0.0.1:6379> lpush list_key php
(integer) 1
127.0.0.1:6379> lpush list_key java
(integer) 2
127.0.0.1:6379> rpush list_key c++
(integer) 3
127.0.0.1:6379> lrange list_key 0 10
1) "java"
2) "php"
3) "c++"
  • Set(集合)

    Redis的Set是string类型的无序集合。

    集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

    以下实例中 b 添加了两次,但根据集合内元素的唯一性,第二次插入的元素将被忽略。

    集合中最大的成员数为 2^32 - 1 (4294967295, 每个集合可存储40多亿个成员)。

命令 行为
sadd key member1 [member2] 向集合添加一个或多个成员
srem key member1 [member2] 移除集合中一个或多个成员
smembers key 返回集合中的所有成员
127.0.0.1:6379> sadd set_key a
(integer) 1
127.0.0.1:6379> sadd set_key b
(integer) 1
127.0.0.1:6379> sadd set_key b
(integer) 0
127.0.0.1:6379> sadd set_key c
(integer) 1
127.0.0.1:6379> smembers set_key
1) "b"
2) "c"
3) "a"
  • zset(sorted set:有序集合)

    Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。

    不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

    zset的成员是唯一的,但分数(score)却可以重复。

命令 行为
zadd key score1 member1 [score2 member2] 向有序集合添加一个或多个成员,或者更新已存在成员的分数
zrem key member1 [member2] 移除有序集合中的一个或多个成员
zrange key start stop [withscores] 通过索引区间返回有序集合成指定区间内的成员
127.0.0.1:6379> zadd zset_key 2 mysql
(integer) 1
127.0.0.1:6379> zadd zset_key 1 memcached
(integer) 1
127.0.0.1:6379> zadd zset_key 3 nosql
(integer) 1
127.0.0.1:6379> zrange zset_key 0 10
1) "memcached"
2) "mysql"
3) "nosql"

更多命令的使用请参考Redis 教程

PHP连接Redis

首先安装PHP Redis扩展,运行phpinfo()查看PHP的版本信息,决定扩展文件版本.

http://windows.php.net/downloads/pecl/snaps/redis/2.2.5/

http://windows.php.net/downloads/pecl/releases/igbinary/1.2.1/

下载正确版本的php_redis.dll和php_igbinary.dll动态链接库文件 ,并放在php\ext目录下 。

编辑php.ini,添加下面代码到php.ini文件中。

;php_redis
extension=php_igbinary.dll
extension=php_redis.dll

注意:extension=php_igbinary.dll一定要放在extension=php_redis.dll的前面,否则此扩展不会生效。

在phpinfo中查看redis扩展是否安装成功:

新建一个PHP文件用来测试:

<?php
    //连接本地的 Redis 服务
   $redis = new Redis();
   $redis->connect(‘127.0.0.1‘, 6379);
   //设置 redis 字符串数据
   $redis->set("str_name", "hello ,这是一个string值");
   //获取存储的数据并输出
   echo $redis->get("str_name");
   echo "\n";
   //存储数据到列表中
   $redis->lpush("mlist_name", "Redis");
   $redis->lpush("mlist_name", "Mongodb");
   $redis->lpush("mlist_name", "Mysql");
   //获取存储的数据并输出
   $arrList = $redis->lrange("mlist_name", 0 ,5);
   var_dump($arrList);

Redis和Memcached的区别

  1. memcached挂掉后,数据没了;redis可以定期保存到磁盘(持久化)。Redis支持服务器端的数据操作,Redis相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,通常在Memcached里,你需要将数据拿到客户端来进行类似的修改再set回去。这大大增加了网络IO的次数和数据体积。在Redis中,这些复杂的操作通常和一般的GET/SET一样高效。所以,如果需要缓存能够支持更复杂的结构和操作,那么Redis会是不错的选择。
  2. 内存使用效率对比:使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。
  3. 性能对比:由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起Memcached,还是稍有逊色。

参考

伯乐在线-memcached 分布式实现原理

菜鸟教程-memcached

在Windows下为PHP5.6安装redis扩展和memcached扩展

redis中文网

码农网

时间: 2024-10-01 00:23:16

NoSQL数据库浅析(一):Redis和Memcached的相关文章

SSDB 一个高性能的支持丰富数据结构的 NoSQL 数据库, 用于替代 Redis.

SSDB 一个高性能的支持丰富数据结构的 NoSQL 数据库, 用于替代 Redis. 特性 替代 Redis 数据库, Redis 的 100 倍容量 LevelDB 网络支持, 使用 C/C++ 开发 Redis API 兼容, 支持 Redis 客户端 适合存储集合数据, 如 list, hash, zset... 客户端 API 支持的语言包括: C++, PHP, Python, Java, Go 持久化的队列服务 主从复制, 负载均衡 性能 性能数据使用 ssdb-bench(SSD

NoSQL之Windows下Redis的测试使用

NoSQL简介 介绍Redis前,我想还是先认识下NoSQL,即not only sql, 是一种非关系型的数据存储,key/value键值对存储.现有Nosql DB 产品: redis/MongoDB/Memcached/Hbase/Cassandra/ Tokyo Cabinet/Voldemort/Dynomite/Riak/ CouchDB/Hypertable/Flare/Tin/Lightcloud/ KiokuDB/Scalaris/Kai/ThruDB, 等等~~~ 为什么需要

redis和memcached缓存

memcached memcache开源的,高性能,高并发分布式内存缓存系统,天生支持集群 memcached下载地址: http://memcached.org/downloads python实现memcached缓存 pip3 install python-memcached import memcache aa=memcache.Client(["10.0.0.20:11211"],debug=True) aa.set("k1","v1"

NoSQL最新现状和趋势:云NoSQL数据库将成重要增长引擎

NoSQL最早起源于1998年,但从2009年开始,NoSQL真正开始逐渐兴起和发展.回望历史应该说NoSQL数据库的兴起,完全是十年来伴随互联网技术,大数据数据的兴起和发展,NoSQL在面临大数据场景下相对于关系型数据库运用,这一概念无疑是一种全新思维的注入. 接下来本文重点梳理下NoSQL领域最新发展趋势以及阿里云NoSQL最新现状,以飨读者. 云NoSQL数据库成为数据库领域重要增长引擎 云化趋势不可避免,根据Gartner的报告,2017年超过73%的DBMS增长来自云厂商,Gartne

HBase、Redis、MongoDB、Couchbase、LevelDB主流 NoSQL 数据库的对比

HBase.Redis.MongoDB.Couchbase.LevelDB主流 NoSQL 数据库的对比 最近小组准备启动一个 node 开源项目,从前端亲和力.大数据下的IO性能.可扩展性几点入手挑选了 NoSql 数据库,但具体使用哪一款产品还需要做一次选型. 我们最终把选项范围缩窄在 HBase.Redis.MongoDB.Couchbase.LevelDB 五款较主流的数据库产品中,本文将主要对它们进行分析对比. 鉴于缺乏项目中的实战经验沉淀,本文内容和观点主要还是从各平台资料搜罗汇总,

数据库应用(Mysql、Mongodb、Redis、Memcached、CouchDB、Cassandra)

目前,主流数据库包括关系型(SQL)和非关系型(NoSQL)两种. 关系数据库是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据,支持复杂的事物处理和结构化查询.代表实现有MySQL.Oracle.PostGreSQL.MariaDB.SQLServer等. 非关系数据库是新兴的数据库技术,它放弃了传统关系型数据库的部分强一致性限制,带来性能上的提升,使其更适用于需要大规模并行处理的场景.非关系型数据库是关系型数据库的良好补充,代表产品有MongoDB.Memca

NoSQL数据库:Redis适用场景及产品定位

传统MySQL+ Memcached架构遇到的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,我们遇到了很多问题: 1.MySQL需要不断进行拆库拆表,Memcached也需不断跟着扩容,扩容和维护工作占据大量开发时间. 2.Memcached与MySQL数据库数据一致性问题. 3.Memcached数据命中率低或down机,大量访问直接穿透到DB,MySQL

NoSQL数据库介绍、memcached安装

NoSQL数据库 什么是NoSQL数据库? 非关系型数据库就是NoSQL,关系型数据库代表MySQL:关系型数据库,是需要吧数据存储到库.表.行.字段中,查询需要根据条件一行行的匹配,需要从磁盘中检索,耗费时间和资源:NoSQL数据库,存储原理简单(数据类型为K-V),数据可以存储在内存里,查询速度非常快:扩展非常容易,支持分布式: 常见的NoSQL数据库 k-v形式:memcached.redis适合存储用户信息,比如回话.配置文件.参数.购物车等等.这些信息一般与ID(键)挂钩,这种情景下键

一篇文章详解NOsql数据库Redis

一图详解DB的分支产品osql数据库介绍 是一种非关系型数据库服务,它能解决常规数据库的并发能力,比如传统的数据库的IO与性能的瓶颈,同样它是关系型数据库的一个补充,有着比较好的高效率与高性能. 专注于key-value查询的redis.memcached.ttserver 解决以下问题: 1)对数据库的高并发读写需求2)大数据的高效存储和访问需求3)高可扩展性和高可用性的需求Nosql数据库的应用环境 1)数据模型比较简单2)需要灵活性更强的IT系统3)对数据库的性能要求较高4)不需要高度数据