码迷,mamicode.com
首页 > 其他好文 > 详细

文章标题

时间:2015-06-27 18:17:20      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:memcached   redis   cassandra   nosql   

NoSQL 数据库产品学习总结(一)

本篇文章共分为四个章节,会陆续整理下 Memcached、Redis、tair、mongodb、hbase、SequoiaDB、 Cassandra的相关知识。 本文为第一个章节,先简介下memcached、reids,有理解不到位的地方,请不吝赐教。

Memcached

1.简介

Memcached 是临时性建值存储的NoSQL产品(官网:memcached.org), 可以用它搭建一套高速的分布式缓冲系统,数据采用LRU算法存储在内存中,数据不会持久化到磁盘,即当内存掉电或内存空间不够,数据会全部释放或LRU部分释放。常被用来做像Mysql这类产品的前面的加速缓冲系统。产品由Danga Interactive公司研发,服务端部分是C写的,客户端部分只要实现Memcached的网络协议,理论上任何语言都可以。

2.数据存储

(1) memcached的内存单元,它的对应关系是:一个Slabclass包含多个slab,一个slab包含多个大小相等的chunk,真正存放memcached数据的最小单元item就放在chunk中。

Memcached 内存结构图:

技术分享

参考:http://brionas.github.io/2014/01/06/memcached-manage/

(2) memcached的数据只会存储在内存中,并不会持久化到磁盘,内存撑满则启动LRU策略。

3.通讯协议

服务端进程采用TCP或UDP通道来链接Memcached的服务端和客户端,具体通信的内容在1.4版本以前仅支持普通的文本协议,1.4版本以后支持了高效的二进制协议。

4.部署结构

Memcached的单机部署方案很简单,单机启动后,在客户端通过TCP或UDP端口连接上来,然后就可以通过Memcached协议使用Memcached了。而集群部署方案,则是针对存在多台Memcached的场景,多台Memcached在通用的方案当中,他们彼此是独立,即互相不感知的。具体的数据Sharding逻辑全部封装在Memcached的客户端中。大致示意图如下:

存储一个KV:

技术分享

读取一个KV:

技术分享

由图可见数据的Sharding逻辑全部写在了客户端里面。

Repcached:

在memcached的解决方案中,分布的不同memcached结点彼此是不能通信的,要实现memcached结点的之间的Master/Slave结构,有一个日本同学开发了一个第三方的工具Recached,可以实现Memcached的主备结构。从结点可以实时的同步主结点的数据,当主节点挂掉,从结点可以热备的提供服务。

  1. 特性

(1) 服务端的连接管理基于libevent 异步事件引擎,能在能在Linux、BSD、Solaris等操作系统上发挥其高性能。能支撑高并发的请求。
(2) 数据不能持久化,常用作数据的加速缓冲。
(3) 通讯协议简单,客户端丰富(C/C++、PHP、Java、Python、Ruby、Perl、Windows/.NET、MySQL、PostgreSQL、Erlang、Lua、Lisp dialects等)

  1. 性能指标

性能这块官方文档这么说:On a fast machine with very high speed networking, memcached can easily handle 200,000+ requests per second. With heavy tuning or even faster hardware it can go many times that. Hitting it a few hundred times per second, even on a slow machine, usually isn’t cause for concern.

看来轻轻松松20W+的qps。

Redis

  1. 简介

Redis是一个支持丰富数据结构的类似memcached的KV分布式存储系统。其开发工作由Redis的开发工作由VMware主持。

  1. 数据存储

(1) 数据存储到内存,并通过配置也可以持久化到磁盘。如果仅存储在内存,则其功能和Memcached类似;而持久化到磁盘则可以保证数据即使因为掉电也不会丢失,目前支持的持久化方式如下两种:RDB持久化方式和AOF持久化方式。

    RDB持久化方式: 在指定的时间间隔能对你的数据进行快照存储.
    AOF持久化方式:则是以与更新命令同步追加的方式实时更新数据文件。

根据以上两种持久化策略可以看出,RDB定时快照的方式在遇到掉电等突发情况下,会丢失当前和最近一次快照时间间隔内的操作数据。而AOF持久化方式通过后台线程fsync的方式通过内存出具和磁盘数据,因为是异步,也会丢失一定的数据,但是因为设置的fsync的策略不同,丢失的数据会很少,同时性能较比RDB也会差一些。

  1. 通讯协议

Redis是一个使用客户端/服务器模型(也被称作请求/响应协议)的TCP服务器:

Redis集群结点间的协议采用的是二进制协议(binary protocol)
客户端与集群通信采用的是文本协议(ascii protocol)

  1. 部署结构

在最新的3.0版本的Redis中,新增了集群部署的结构,集群各个节点可以通过gossip协议进行数据同步。
技术分享

而3.0以前的版本测试采用Redis Sentinel利用单双MS的结构来管理集群。

集群结点间通信采用gossip协议。

  1. 特性

(1) 具有157个操作命令
(2) 支持管道(一次发送多个命令)
(3) 支持消息Pub/sub 机制。
(4) 批量操作的事物机制。

  1. 性能指标

Redis的benchmark,从测试结果来看,单纯的get/set命令可以达到10w+每秒,而pipeline的批量执行命令,已经达到了50w+的水准。其性能和memcached相比一点都不差。

版权声明:本文为博主原创文章,未经博主允许不得转载。

文章标题

标签:memcached   redis   cassandra   nosql   

原文地址:http://blog.csdn.net/lantian0802/article/details/46662939

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