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

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

Memcached

1.简单介绍

Memcached 是暂时性建值存储的NoSQL产品(官网:memcached.org), 能够用它搭建一套快速的分布式缓冲系统。数据採用LRU算法存储在内存中,数据不会持久化到磁盘,即当内存掉电或内存空间不够。数据会所有释放或LRU部分释放。常被用来做像Mysql这类产品的前面的加速缓冲系统。产品由Danga Interactive公司研发,服务端部分是C写的,client部分仅仅要实现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的服务端和client,详细通信的内容在1.4版本号曾经仅支持普通的文本协议,1.4版本号以后支持了高效的二进制协议。

4.部署结构

Memcached的单机部署方案非常easy,单机启动后。在client通过TCP或UDPport连接上来。然后就能够通过Memcached协议使用Memcached了。

而集群部署方案。则是针对存在多台Memcached的场景,多台Memcached在通用的方案其中,他们彼此是独立。即互相不感知的。详细的数据Sharding逻辑所有封装在Memcached的client中。

大致示意图例如以下:

存储一个KV:

读取一个KV:

由图可见数据的Sharding逻辑所有写在了client里面。

Repcached:

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

  1. 特性

(1) 服务端的连接管理基于libevent 异步事件引擎,能在能在Linux、BSD、Solaris等操作系统上发挥其高性能。能支撑高并发的请求。

(2) 数据不能持久化。经常使用作数据的加速缓冲。

(3) 通讯协议简单。client丰富(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是一个使用client/server模型(也被称作请求/响应协议)的TCPserver:

Redis集群结点间的协议採用的是二进制协议(binary protocol)

client与集群通信採用的是文本协议(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相比一点都不差。

NoSQL 数据库产品学习总结(一)的更多相关文章

  1. NoSQL数据库-MongoDB 学习(一)

    基本介绍 MongoDB 是为了快速开发互联网 Web 应用而设计的数据库系统 MongoDB 的设计目标是极简.灵活.作为 Web 应用栈的一部分 MongoDB 的数据模型是面向文档的,所谓文档是 ...

  2. NoSQL 数据库概览及其与 SQL 语法的比较

    NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用的难题. 本文对NoSQL数据库的定义.分类.特征.当前比较流行的NoSQL数据库系统等进行了简单的介绍,并对N ...

  3. NoSQL数据库概览及其与SQL语法的比較

    [文章摘要] HBase是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统.同一时候也是知名的NoSQL数据库之中的一个.NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤 ...

  4. 3大主流NoSQL数据库性能对比测试报告

    近日,知名独立基准测评机构Bankmark,针对目前市面上主流的NoSQL数据库SequoiaDB.MongoDB以及Cassandra三款NoSQL数据库产品做了性能对比测试并发布测试报告.在所有的 ...

  5. NoSQL 数据库之MongoDB

    1.MongoDB简介 1.1什么是MongoDB MongoDB 是一个跨平台的,面向文档的数据库,是当前 NoSQL 数据库产品中最热门的一种.它介于关系数据库和非关系数据库之间,是非关系数据库当 ...

  6. 大数据技术原理与应用【第五讲】NoSQL数据库:5.1 NoSQL概论&5.2 NoSQL与关系数据库的比较

    5.1 NoSQL概论 最初:反SQL 概念演变,现在:Not only SQL 特点: 1.灵活的可扩展性 所以支持海量数据存储 2.灵活的数据模型 例如:HBase 3.和云计算的紧密结合 (一) ...

  7. NoSQL数据库的四大分类的分析

    分类 Examples举例 典型应用场景 数据模型 优点 缺点 键值(key-value) Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB 内容缓 ...

  8. NoSQL数据库之国产开源产品:SequoiaDB 分析前言

    随着互联网技术的发展,面对海量数据的存储和分析,传统关系型数据库已经无法满足,由此衍生出一种与关系型数据库区别开的数据库NoSQL(Not Only SQL). 国外做的比较成熟的NoSQL有Mong ...

  9. Spring学习之旅(十三)--使用NoSQL数据库

    除了关系型数据库之外,现在还有一种 NoSQL 数据库非常流行,而 Spring 自然也没有放过对它的支持. NoSQL 数据库有很多种,如: MongoDBGenericJackson2JsonRe ...

随机推荐

  1. POJ 2289 Jamie's Contact Groups & POJ3189 Steady Cow Assignment

    这两道题目都是多重二分匹配+枚举的做法,或者可以用网络流,实际上二分匹配也就实质是网络流,通过枚举区间,然后建立相应的图,判断该区间是否符合要求,并进一步缩小范围,直到求出解.不同之处在对是否满足条件 ...

  2. codeforces Mafia

    /* * Mafia.cpp * * Created on: 2013-10-12 * Author: wangzhu */ /** * 每个人都想玩若干场,求至少需要玩几场才可以满足大家的需求. * ...

  3. Android 带着用户名的SharedPreferences

    /** * 设置当前用户的签到信息 * account&info;account&info * * @param context * @param sign * @author jrj ...

  4. 自定义的IntentFileter 无法找到activity

    <intent-filter > <action android:name="com.leo.enjoytime.VIEW"/></intent-fi ...

  5. Nuget

    Install-Package Microsoft.AspNet.WebApi.Cors

  6. Tomcat部署(转)

    首先说说tomcat的几种部署方法: 1.将应用文件夹或war文件塞到tomcat安装目录下的webapps子目录下,这样tomcat启动的时候会将webapps目录下的文件夹或war内容当成应用部署 ...

  7. Java JSON序列化杂谈

    在C#中序列化是比较容易的,如果不用第三方的类库,那么C#提供的两个对象也够我们使用,一般的操作是定义一个不含有方法的类,这个类里面定义了要序列化的对象的属性,因为我C#用的比较多,这里直接给出泛型, ...

  8. C​+​+​构​造​函​数​,​复​制​构​造​函​数​和​析​构​函​数​专​题

    链接:http://wenku.baidu.com/view/d9316c0e52ea551810a6872a.html 本文作者:黄邦勇帅本文是学习 C++中的最基本的内容,因此学习 C++就应全部 ...

  9. 删除一个目录和其各级子目录下的.svn文件

    两种方法[1]用find命令和其action来实现[2]用rm直接实现$ cd /tmp/xxx$ rm -rf  `find . -name .svn`就可以实现了. 删除SVN目录及从服务器端删除 ...

  10. Git branch (分支学习)

    以前总结的一些git操作,分享在这里. Git 保存的不是文件差异或者变化量,而只是一系列文件快照.   - 列出当前所有分支 git branch <--merge> | <--n ...