技术改变世界 阅读塑造人生! - shaogx.com

This string was altered by TechBlog\Plugins\Example.; This is an example to show the potential of an offcanvas layout pattern in Bootstrap. Try some responsive-range viewport sizes to see it in action.

谈谈Memcached与Redis(三)

 3. Memcached和Redis关键技术对比作为内存数据缓冲系统,Memcached和Redis均具有很高的性能,但是两者在关键实现技术上具有很大差异,这种差异决定了两者具有不同的特点和不同的适用条件。下面我们会对两者的关键技术进行一些对比,以此来揭示两者的差异。3.1 Memcached和Redis的内存管理机制对比对于像Redis和Memcached这种基于内存的数据库系统来说,内存管理的效率高低是影响系统性能的关键因素。传统C语言中的malloc/free函数是最常用的分配和释放内存的方法,但是这种方法存在着很大的缺陷:首先,对于开发人员来说不匹配的malloc和free容易造成内存泄露;其次,频繁调用会造成大量内存碎片无法回收重新利用,降低内存利用率;最后,作为系统调用,其系统开销远远大于一般函数调用。所以,为了提高内存的管理效率,高效的内存管理方案都不会直接使用malloc/free调用。Redis和Memcached均使用了自身设计的内存管理机制,但是实现方法存在很大的差异,下面将会对两者的内存管理机制分别进行介绍。3.1.1 Memcached的内存管理机制Memcached默认使用Slab Allocation机制管理内存,其主要思想是按照预先规定的大小,将分配的内存分割成特定长度的块以存储相应长度的key-value数据记录,以完全解决内存碎片问题。Slab Allocation机制只为存储外部数据而设计,也就是说所有的key-value数据都存储在Slab Allocation系统里,而Memcached的其它内存请求则通过普通的malloc/free来申请,因为这些请求的数量和频率决定了它们不会对整个系统的性能造成影响Slab Allocation的原理相当简单。 如图3所示,它首先从操作系统申请一大块内存,并将其分割成各种尺寸的块Chunk,并把尺寸相同的块分成组Slab Class。其中,Chunk就是用来存储key-value数据的最小单位。每个Slab Class的大小,可以在Memcached启动的时候通过制定Growth Factor来控制。假定Figure 1中Growth Factor的取值为1.25,所以如果第一组Chunk的大小为88个字节,第二组Chunk的大小就为112个字节,依此类推。图3 Memcached内存管理架构当Memcached接收到客户端发送过来的数据时首先会根据收到数据的大小选择一个最合适的Slab Class,然后通过查询Memcached保存着的该Slab Class内空闲Chunk的列表就可以找到一个可用于存储数据的Chunk。当一条数据库过期或者丢弃时,该记录所占用的Chunk就可以回收,重新添加到空闲列表中。从以上过程我们可以看出Memcached的内存管理制效率高,而且不会造成内存碎片,但是它最大的缺点就是会导致空间浪费。因为每个Chunk都分配了特定长度的内存空间,所以变长数据无法充分利用这些空间。如图 4所示,将100个字节的数据缓存到128个字节的Chunk中,剩余的28个字节就浪费掉了。 图4 Memcached的存储空间浪费3.1.2 Redis的内存管理机制Redis的内存管理主要通过源码中zmalloc.h和zmalloc.c两个文件来实现的。Redis为了方便内存的管理,在分配一块内存之后,会将这块内存的大小存入内存块的头部。如图 5所示,real_ptr是redis调用malloc后返回的指针。redis将内存块的大小size存入头部,size所占据的内存大小是已知的,为size_t类型的长度,然后返回ret_ptr。当需要释放内存的时候,ret_ptr被传给内存管理程序。通过ret_ptr,程序可以很容易的算出real_ptr的值,然后将real_ptr传给free释放内存。图5 Redis块分配Redis通过定义一个数组来记录所有的内存分配情况,这个数组的长度为ZMALLOC_MAX_ALLOC_STAT。数组的每一个元素代表当前程序所分配的内存块的个数,且内存块的大小为该元素的下标。在源码中,这个数组为zmalloc_allocations。zmalloc_allocations[16]代表已经分配的长度为16bytes的内存块的个数。zmalloc.c中有一个静态变量used_memory用来记录当前分配的内存总大小。所以,总的来看,Redis采用的是包装的mallc/free,相较于Memcached的内存管理方法来说,要简单很多。... 全文

nosql

谈谈Memcached与Redis(四)

 3.2 Redis和Memcached的集群实现机制对比Memcached是全内存的数据缓冲系统,Redis虽然支持数据的持久化,但是全内存毕竟才是其高性能的本质。作为基于内存的存储系统来说,机器物理内存的大小就是系统能够容纳的最大数据量。如果需要处理的数据量超过了单台机器的物理内存大小,就需要构建分布式集群来扩展存储能力。3.2.1 Memcached的分布式存储Memcached本身并不支持分布式,因此只能在客户端通过像一致性哈希这样的分布式算法来实现Memcached的分布式存储。图6 给出了Memcached的分布式存储实现架构。当客户端向Memcached集群发送数据之前,首先会通过内置的分布式算法计算出该条数据的目标节点,然后数据会直接发送到该节点上存储。但客户端查询数据时,同样要计算出查询数据所在的节点,然后直接向该节点发送查询请求以获取数据。图6 Memcached客户端分布式存储实现3.2.2 Redis的分布式存储相较于Memcached只能采用客户端实现分布式存储,Redis更偏向于在服务器端构建分布式存储。尽管Redis当前已经发布的稳定版本还没有添加分布式存储功能,但Redis开发版中已经具备了Redis Cluster的基本功能。预计在2.6版本之后,Redis就会发布完全支持分布式的稳定版本,时间不晚于2012年底。下面我们会根据开发版中的实现,简单介绍一下Redis Cluster的核心思想。Redis Cluster是一个实现了分布式且允许单点故障的Redis高级版本,它没有中心节点,具有线性可伸缩的功能。图7给出Redis Cluster的分布式存储架构,其中节点与节点之间通过二进制协议进行通信,节点与客户端之间通过ascii协议进行通信。在数据的放置策略上,Redis Cluster将整个key的数值域分成4096个哈希槽,每个节点上可以存储一个或多个哈希槽,也就是说当前Redis Cluster支持的最大节点数就是4096。Redis Cluster使用的分布式算法也很简单:crc16( key ) % HASH_SLOTS_NUMBER。 图7 Redis分布式架构为了保证单点故障下的数据可用性,Redis Cluster引入了Master节点和Slave节点。如图4所示,在Redis Cluster中,每个Master节点都会有对应的两个用于冗余的Slave节点。这样在整个集群中,任意两个节点的宕机都不会导致数据的不可用。当Master节点退出后,集群会自动选择一个Slave节点成为新的Master节点。图8 Redis Cluster中的Master节点和Slave节点3.3 Redis和Memcached整体对比Redis的作者Salvatore Sanfilippo曾经对这两种基于内存的数据存储系统进行过比较,总体来看还是比较客观的,现总结如下:1)性能对比:由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起Memcached,还是稍有逊色。2)内存使用效率对比:使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。3)Redis支持服务器端的数据操作:Redis相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,通常在Memcached里,你需要将数据拿到客户端来进行类似的修改再set回去。这大大增加了网络IO的次数和数据体积。在Redis中,这些复杂的操作通常和一般的GET/SET一样高效。所以,如果需要缓存能够支持更复杂的结构和操作,那么Redis会是不错的选择。... 全文

nosql

谈谈Memcached与Redis(一)

 1. Memcached简介Memcached是以LiveJurnal旗下Danga Interactive公司的Bard Fitzpatric为首开发的高性能分布式内存缓存服务器。其本质上就是一个内存key-value数据库,但是不支持数据的持久化,服务器关闭之后数据全部丢失。Memcached使用C语言开发,在大多数像Linux、BSD和Solaris等POSIX系统上,只要安装了libevent即可使用。在Windows下,它也有一个可用的非官方版本(http://code.jellycan.com/memcached/)。Memcached的客户端软件实现非常多,包括C/C++, PHP, Java, Python, Ruby, Perl, Erlang, Lua等。当前Memcached使用广泛,除了LiveJournal以外还有Wikipedia、Flickr、Twitter、Youtube和WordPress等。在Window系统下,Memcached的安装非常方便,只需从以上给出的地址下载可执行软件然后运行memcached.exe –d install即可完成安装。在Linux等系统下,我们首先需要安装libevent,然后从获取源码,make && make install即可。默认情况下,Memcached的服务器启动程序会安装到/usr/local/bin目录下。在启动Memcached时,我们可以为其配置不同的启动参数。1.1 Memcache配置Memcached服务器在启动时需要对关键的参数进行配置,下面我们就看一看Memcached在启动时需要设定哪些关键参数以及这些参数的作用。1)-p <num> Memcached的TCP监听端口,缺省配置为11211;2)-U <num> Memcached的UDP监听端口,缺省配置为11211,为0时表示关闭UDP监听;3)-s <file> Memcached监听的UNIX套接字路径;4)-a <mask> 访问UNIX套接字的八进制掩码,缺省配置为0700;5)-l <addr> 监听的服务器IP地址,默认为所有网卡;6)-d 为Memcached服务器启动守护进程;7)-r 最大core文件大小;8)-u <username> 运行Memcached的用户,如果当前为root的话需要使用此参数指定用户;9)-m <num> 分配给Memcached使用的内存数量,单位是MB;10)-M 指示Memcached在内存用光的时候返回错误而不是使用LRU算法移除数据记录;11)-c <num> 最大并发连数,缺省配置为1024;12)-v –vv –vvv 设定服务器端打印的消息的详细程度,其中-v仅打印错误和警告信息,-vv在-v的基础上还会打印客户端的命令和相应,-vvv在-vv的基础上还会打印内存状态转换信息;13)-f <factor> 用于设置chunk大小的递增因子;14)-n <bytes> 最小的chunk大小,缺省配置为48个字节;15)-t <num> Memcached服务器使用的线程数,缺省配置为4个;16)-L 尝试使用大内存页;17)-R 每个事件的最大请求数,缺省配置为20个;18)-C 禁用CAS,CAS模式会带来8个字节的冗余;2. Redis简介Redis是一个开源的key-value存储系统。与Memcached类似,Redis将大部分数据存储在内存中,支持的数据类型包括:字符串、哈希表、链表、集合、有序集合以及基于这些数据类型的相关操作。Redis使用C语言开发,在大多数像Linux、BSD和Solaris等POSIX系统上无需任何外部依赖就可以使用。Redis支持的客户端语言也非常丰富,常用的计算机语言如C、C#、C++、Object-C、PHP、Python、Java、Perl、Lua、Erlang等均有可用的客户端来访问Redis服务器。当前Redis的应用已经非常广泛,国内像新浪、淘宝,国外像Flickr、Github等均在使用Redis的缓存服务。Redis的安装非常方便,只需从http://redis.io/download获取源码,然后make && make install即可。默认情况下,Redis的服务器启动程序和客户端程序会安装到/usr/local/bin目录下。在启动Redis服务器时,我们需要为其指定一个配置文件,缺省情况下配置文件在Redis的源码目录下,文件名为redis.conf。2.1 Redis配置文件为了对Redis的系统实现有一个直接的认识,我们首先来看一下Redis的配置文件中定义了哪些主要参数以及这些参数的作用。1)daemonize no 默认情况下,redis不是在后台运行的。如果需要在后台运行,把该项的值更改为yes;2)pidfile /var/run/redis.pid当Redis在后台运行的时候,Redis默认会把pid文件放在/var/run/redis.pid,你可以配置到其他地址。当运行多个redis服务时,需要指定不同的pid文件和端口;3)port 6379指定redis运行的端口,默认是6379;4)bind 127.0.0.1 指定redis只接收来自于该IP地址的请求,如果不进行设置,那么将处理所有请求。在生产环境中最好设置该项;5)loglevel debug 指定日志记录级别,其中Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose。debug表示记录很多信息,用于开发和测试。verbose表示记录有用的信息,但不像debug会记录那么多。notice表示普通的verbose,常用于生产环境。warning 表示只有非常重要或者严重的信息会记录到日志;6)logfile /var/log/redis/redis.log 配置log文件地址,默认值为stdout。若后台模式会输出到/dev/null;7)databases 16 可用数据库数,默认值为16,默认数据库为0,数据库范围在0-(database-1)之间;8)save 900 1保存数据到磁盘,格式为save <seconds> <changes>,指出在多长时间内,有多少次更新操作,就将数据同步到数据文件rdb。相当于条件触发抓取快照,这个可以多个条件配合。save 900 1就表示900秒内至少有1个key被改变就保存数据到磁盘;9)rdbcompression yes 存储至本地数据库时(持久化到rdb文件)是否压缩数据,默认为yes;10)dbfilename dump.rdb本地持久化数据库文件名,默认值为dump.rdb;11)dir ./ 工作目录,数据库镜像备份的文件放置的路径。这里的路径跟文件名要分开配置是因为redis在进行备份时,先会将当前数据库的状态写入到一个临时文件中,等备份完成时,再把该临时文件替换为上面所指定的文件。而这里的临时文件和上面所配置的备份文件都会放在这个指定的路径当中,AOF文件也会存放在这个目录下面。注意这里必须指定一个目录而不是文件;12)slaveof <masterip> <masterport> 主从复制,设置该数据库为其他数据库的从数据库。设置当本机为slave服务时,设置master服务的IP地址及端口。在Redis启动时,它会自动从master进行数据同步;13)masterauth <master-password> 当master服务设置了密码保护时(用requirepass制定的密码)slave服务连接master的密码;14)slave-serve-stale-data yes 当从库同主机失去连接或者复制正在进行,从机库有两种运行方式:如果slave-serve-stale-data设置为yes(默认设置),从库会继续相应客户端的请求。如果slave-serve-stale-data是指为no,除去INFO和SLAVOF命令之外的任何请求都会返回一个错误"SYNC with master in progress";15)repl-ping-slave-period 10从库会按照一个时间间隔向主库发送PING,可以通过repl-ping-slave-period设置这个时间间隔,默认是10秒;16)repl-timeout 60 设置主库批量数据传输时间或者ping回复时间间隔,默认值是60秒,一定要确保repl-timeout大于repl-ping-slave-period;17)requirepass foobared 设置客户端连接后进行任何其他指定前需要使用的密码。因为redis速度相当快,所以在一台比较好的服务器下,一个外部的用户可以在一秒钟进行150K次的密码尝试,这意味着你需要指定非常强大的密码来防止暴力破解;18)rename-command CONFIG "" 命令重命名,在一个共享环境下可以重命名相对危险的命令,比如把CONFIG重名为一个不容易猜测的字符:# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52。如果想删除一个命令,直接把它重命名为一个空字符""即可:rename-command CONFIG "";19)maxclients 128设置同一时间最大客户端连接数,默认无限制。Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件描述符数。如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息;20)maxmemory <bytes> 指定Redis最大内存限制。Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,Redis同时也会移除空的list对象。当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。注意:Redis新的vm机制,会把Key存放内存,Value会存放在swap区;21)maxmemory-policy volatile-lru 当内存达到最大值的时候Redis会选择删除哪些数据呢?有五种方式可供选择:volatile-lru代表利用LRU算法移除设置过过期时间的key (LRU:最近使用 Least Recently Used ),allkeys-lru代表利用LRU算法移除任何key,volatile-random代表移除设置过过期时间的随机key,allkeys_random代表移除一个随机的key,volatile-ttl代表移除即将过期的key(minor TTL),noeviction代表不移除任何key,只是返回一个写错误。注意:对于上面的策略,如果没有合适的key可以移除,写的时候Redis会返回一个错误;22)appendonly no 默认情况下,redis会在后台异步的把数据库镜像备份到磁盘,但是该备份是非常耗时的,而且备份也不能很频繁。如果发生诸如拉闸限电、拔插头等状况,那么将造成比较大范围的数据丢失,所以redis提供了另外一种更加高效的数据库备份及灾难恢复方式。开启append only模式之后,redis会把所接收到的每一次写操作请求都追加到appendonly.aof文件中。当redis重新启动时,会从该文件恢复出之前的状态,但是这样会造成appendonly.aof文件过大,所以redis还支持了BGREWRITEAOF指令对appendonly.aof 进行重新整理,你可以同时开启asynchronous dumps 和 AOF;23)appendfilename appendonly.aof  AOF文件名称,默认为"appendonly.aof";24)appendfsync everysec  Redis支持三种同步AOF文件的策略: no代表不进行同步,系统去操作,always代表每次有写操作都进行同步,everysec代表对写操作进行累积,每秒同步一次,默认是"everysec",按照速度和安全折中这是最好的。25)slowlog-log-slower-than 10000 记录超过特定执行时间的命令。执行时间不包括I/O计算,比如连接客户端,返回结果等,只是命令执行时间。可以通过两个参数设置slow log:一个是告诉Redis执行超过多少时间被记录的参数slowlog-log-slower-than(微妙),另一个是slow log 的长度。当一个新命令被记录的时候最早的命令将被从队列中移除,下面的时间以微妙微单位,因此1000000代表一分钟。注意制定一个负数将关闭慢日志,而设置为0将强制每个命令都会记录;26)hash-max-zipmap-entries 512 && hash-max-zipmap-value 64 当hash中包含超过指定元素个数并且最大的元素没有超过临界时,hash将以一种特殊的编码方式(大大减少内存使用)来存储,这里可以设置这两个临界值。Redis Hash对应Value内部实际就是一个HashMap,实际这里会有2种不同实现。这个Hash的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,对应的value redisObject的encoding为zipmap。当成员数量增大时会自动转成真正的HashMap,此时encoding为ht;27)list-max-ziplist-entries 512 list数据类型多少节点以下会采用去指针的紧凑存储格式;28)list-max-ziplist-value 64数据类型节点值大小小于多少字节会采用紧凑存储格式;29)set-max-intset-entries 512 set数据类型内部数据如果全部是数值型,且包含多少节点以下会采用紧凑格式存储;30)zset-max-ziplist-entries 128 zsort数据类型多少节点以下会采用去指针的紧凑存储格式;31)zset-max-ziplist-value 64 zsort数据类型节点值大小小于多少字节会采用紧凑存储格式。32)activerehashing yes Redis将在每100毫秒时使用1毫秒的CPU时间来对redis的hash表进行重新hash,可以降低内存的使用。当你的使用场景中,有非常严格的实时性需要,不能够接受Redis时不时的对请求有2毫秒的延迟的话,把这项配置为no。如果没有这么严格的实时性要求,可以设置为yes,以便能够尽可能快的释放内存;... 全文

nosql

主流NoSQL数据库评测之HandlerSocket

NoSQL是伴随着web2.0的迅猛发展而在2009年被提出的一个概念,一般可以通俗的理解为高性能的Key Value存储结构的数据库,当然也有其他更广泛的类型。它基于CAP和BASE理论,强调最终一致性,具有数据结构灵活、扩展方便、大数据量下读写性能 高效等特点,在互联网行业被广泛采用。本系列文章将评测广受关注的几个NoSQL数据库产品。本文关注的是HandlerSocket Plugin for MySQL。  HandlerSocket简介:... 全文

HandlerSocke

详解NoSQL数据库Apache Cassandra的配置

在这里我们将介绍的是NoSQL数据库Apache Cassandra的配置与相关问题。现在数据库市场对于NoSQL的关注度日益升高,我们也该看到未来数据库技术的变革。... 全文

Cassandra

主流NoSQL数据库之Redis全面评测

本文要评测NoSQL的产品是Redis,可以把它的功能理解为一个Key-Value的数据结构操作,数据都保存在内存中定期刷新到磁盘,以极高的读写效率而备受关注。介 绍... 全文

Redis

主流NoSQL数据库全方位评测:MongoDB

本篇要评测的NoSQL产品是MongoDB,它是现在开源社区里越来越受到关注的一个NoSQL产品,按照官方的说法,是一个可扩展的、高性能 的、开源的、面向文档的数据库。Craigslist、foursquare、国内的淘宝网等知名互联网公司都有在他们的生产环境部署了MongoDB。   一、MongoDB简介... 全文

MongoDB

CouchDB 让人头痛的十大问题

下面十条内容来自paperplanes的博主Mathias Meyer,他也是一位NoSQL的实践者,CouchDB就是其钟爱的数据库之一。正所谓爱之深恨之切,在使用CouchDB的过程中,他发现很多不顺手的地方,就是本文列举的十大问题。View是在读时更新的... 全文

NoSQL CouchDB

redis安装,配置

一)下载源码,编译安装# wget http://redis.googlecode.com/files/redis-2.2.8.tar.gz # tar xf redis-2.2.8.tar.gz # cd redis # make  # 网上说不能make install,可我这就是可以,奇怪,省去了手动copy redis命令的步骤# make install  make install后显示... 全文

休闲 nosql redis 职场

第一部分 基础篇 第一章 走进MongoDB

声明:该文章主要来自《MongoDB实战》一书内容,主要想通过该书学习MongoDB的相应知识,加深理解,故写在自己的博文当中,作为记录在最后的章节中,会有一个自己集合MongoDB数据库应用的JavaEE的web应用。第一章 走进MongoDB... 全文

MongoDB NoSQL

Digg投奔NoSQL 关系数据库行将就木

【51CTO综合报道】NoSQL的未来一片光明,51CTO之前也曾报道过《对SQL说不!NoSQL的数据库技术革命》。如此看来,传统数据库,特别是关系数据库的未来很不明朗。... 全文

Digg MySQL

主流NoSQL数据库评测之HBase(1)

本篇要评测的NoSQL产品是HBase,和其他简单的Key-Value结构不同,HBase主要面向处理海量数据的应用,可以认为是Google BigTable的一个开源版本。由于Facebook使用HBase来存储消息内容和大数据量的实时分析而使得这一产品备受关注。一、HBase简介HBase是用Java开发的,是一个开源的、分布式的、面向列的数据库,其存储的每个值都有一个时间戳,可以根据定义好的规则保存多个版本(默认是3个),这样就可以记录数据的变动情况。... 全文

HBase

近期Hadoop实施心得与总结

Hadoop实施已经有快一个月了,对Hadoop(1.0.3)的概念理解、使用,Linux 与 Shell脚本,甚至对 Mysql 都有了更多的理解。项目背景:用于互联网信息收集后的关键词匹配与内容提取。主要系统架构分为互联网爬虫、分析、业务应用三块: 简单架构描述  由于我在当中的角色主要负责分析架构的搭建,所以其他两块都画得简单,下面也不会过多的描述。Hadoop理解:提到Hadoop都想到的是云、分布式计算,在一段时间的实施之后有了一些具体的理解。Hadoop的优势:... 全文

Hadoop NoSQL 实施

使用Redis的五个注意事项

下面内容来源于Quora上的一个提问,问题是使用Redis需要避免的五个问题。而回答中超出了五个问题的范畴,描述了五个使用Redis的注意事项。如果你在使用或者考虑使用Redis,可能你可以学习一下下面的一些建议,避免一下提到的问题。1.使用key值前缀来作命名空间虽然说Redis支持多个数据库(默认32个,可以配置更多),但是除了默认的0号库以外,其它的都需要通过一个额外请求才能使用。所以用前缀作为命名空间可能会更明智一点。... 全文

NoSQL 数据库

Mongodb安装及使用

简介MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。 Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。它的特点是高性能、易部署、易使用,存储数据非常方便。... 全文

关系数据库 nosql mongodb

NoSQL内战:MongoDB与CouchDB查询方式对比

【51CTO经典译文】MongoDB和CouchDB都是面向文档的数据库,它们都使用JSON文档格式,它俩通常都被看作是NoSQL数据库,并且现在都很时髦,有很多的共同点,但谈到查询时,两者的差别就很明显了,CouchDB需要预定义视图(本质上是JavaScript MapReduce函数),而MongoDB支持动态查询(基本上和传统关系数据库上的即席查询类似),更重要的是,谈到查询时,CouchDB的API是RESTful,而MongoDB的API更原生化,这意味着在代码中发出一个查询就要使用一个驱动。... 全文

MongoDB CouchDB

Cassandra,Mongodb,CouchDB,Redis,HBase分类探讨

1、Mongodb,CouchDB为文档型数据库,可以理解为数据以JSON等文档格式存储;2、Cassandra,HBase为列簇型数据库,同时支持更加复杂的存储方式,是关系型数据库扩展;3、Redis:提供了一组hash,set等数据结构,更像一组开发包。参考资料:Cassandra,Mongodb,CouchDB,Redis,Riak,HBase比较2012-02-04 22:02,已浏览376次... 全文

nosql

NoSQL移形换位 看Cassandra如何迁移到MongoDB

Flowdock是一个基于Web的团队通讯工具.所有的软件开发人员都应该使用它进行沟通,而不是使用Campfires、Skype Chats或IRC等工具.因为它可以更好的的支持他们的真实工作流.上周,我们对Flowdock的数据库服务做了一次切换,聪从Cassandra迁移到了另一种NoSQL工具-MongoDB.由于我们的技术选择已经引起了大家的部分兴趣,我将在此向公众说明下我们的决策理由.我们的部分客户一定对下面这个图片记忆犹新:... 全文

Cassandra MongoDB

Redis简单介绍之(安装篇)

系统环境:Centos 6.3 X86_64Redis介绍    Redis本质上一个Key/Value数据库,与Memcached类似的NoSQL型数据库,但是他的数据可以持久化的保存在磁盘上,解决了服务重启后数据不丢失的问题,他的值可以是string(字符串)、list(列表)、sets(集合)或者是ordered  sets(被排序的集合),所有的数据类型都具有push/pop、add/remove、执行服务端的并集、交集、两个sets集中的差别等等操作,这些操作都是具有原子性的,Redis还支持各种不同的排序能力    Redis 2.0更是增加了很多新特性,如:提升了性能、增加了新的数据类型、更少的利用内存(AOF和VM)    Redis支持绝大部分主流的开发语言,如:C、Java、C#、PHP、Perl、Python、Lua、Erlang、Ruby等等Redis的功能:       1、Redis的Sharding:Redis支持客户端的Sharding功能,通过一致性hash算法实现,当前Redis不支持故障冗余,在集群中不能在线增加或删除Redis       2、Redis的master/slave复制:           1). 一个master支持多个slave           2). Slave可以接受其他slave的连接来替代他连接master           3). 复制在master是非阻塞的,而在slave是阻塞的           4). 复制被利用来提供可扩展性,在slave端只提供查询功能及数据的冗余       3、Redis的Virtual Memory功能:vm是Redis2.0新增的一个非常稳定和可靠的功能,vm的引入是为了提高Redis的性能,也就是把很少使用的value保存到disk,而key保存在内存中。实际上就是如果你有10w的keys在内存中,而只有仅仅10%左右的key经常使用,那么Redis可以通过开启VM尝试将不经常使用的Value转换到disk上保存       4、Redis的附加档案(AOF)功能:Redis通过配置的策略将数据集保存到aof中,当Redis挂掉后能够通过aof恢复到挂掉前的状态Redis的安装及配置:[root@chen download]# wget [url=http://redis.googlecode.com/files/redis-2.0.0-rc4.tar.gz]http://redis.googlecode.com/files/redis-2.0.0-rc4.tar.gz[/url] [root@chen download]# tar zxvf redis-2.0.0-rc4.tar.gz [root@chen download]# cd redis-2.0.0-rc4 [root@chen redis-2.0.0-rc4]# make   [root@chen redis-2.0.0-rc4]# mkdir ~/redis [root@chen redis-2.0.0-rc4]# cp redis-server ~/redis [root@chen redis-2.0.0-rc4]# cp redis-benchmark ~/redis [root@chen redis-2.0.0-rc4]# cp redis-cli ~/redis [root@chen redis-2.0.0-rc4]# cp redis.conf ~/redis [root@chen redis-2.0.0-rc4]# cd ~/redis配置redis.conf配置文件:#是否作为守护进程运行 daemonize yes #配置pid的存放路径及文件名,默认为当前路径下 pidfile redis.pid #Redis默认监听端口 port 6379 #客户端闲置多少秒后,断开连接 timeout 300 #日志显示级别 loglevel verbose #指定日志输出的文件名,也可指定到标准输出端口 logfile stdout #设置数据库的数量,默认连接的数据库是0,可以通过select N来连接不同的数据库 databases 16 #保存数据到disk的策略 #当有一条Keys数据被改变是,900秒刷新到disk一次 save 900 1 #当有10条Keys数据被改变时,300秒刷新到disk一次 save 300 10 #当有1w条keys数据被改变时,60秒刷新到disk一次 save 60 10000 #当dump    .rdb数据库的时候是否压缩数据对象 rdbcompression yes #dump数据库的数据保存的文件名 dbfilename dump.rdb #Redis的工作目录 dir /home/falcon/redis-2.0.0/ ###########    Replication ##################### #Redis的复制配置 # slaveof <masterip> <masterport> # masterauth <master-password>   ############## SECURITY ########### # requirepass foobared   ############### LIMITS ############## #最大客户端连接数 # maxclients 128 #最大内存使用率 # maxmemory <bytes>   ########## APPEND ONLY MODE ######### #是否开启日志功能 appendonly no # 刷新日志到disk的规则 # appendfsync always appendfsync everysec # appendfsync no ################ VIRTUAL MEMORY ########### #是否开启VM功能 vm-enabled no # vm-enabled yes vm-swap-file logs/redis.swap vm-max-memory 0 vm-page-size 32 vm-pages 134217728 vm-max-threads 4 ############# ADVANCED CONFIG ############### glueoutputbuf yes hash-max-zipmap-entries 64 hash-max-zipmap-value 512 #是否重置Hash表 activerehashing yes启动Redis :[root@chen redis]# ./redis-server redis.conf本文出自 “平凡的日子” 博客,请务必保留此出处http://wolfchen.blog.51cto.com/2211749/1096481... 全文

Redis NoSQL 十全十美

NoSQL数据库CouchDB发布Android SDK

51CTO曾报道过《NoSQL数据库Apache CouchDB》,CouchDB是一个"面向文档"的数据库,采用ErLang语言开发,文档的格式是一个JSON字符串(也可包含二进制附件)。在移动开发领域迅速发展的情况下,CouchDB渐渐把目光投向了移动开发领域。CouchDB 1.0版发布之后,该产品开始支持移动开发平台。2010年8月10日,CouchDB的主要开发商Couch.io公司宣布发布了 “CouchDB SDK for Android”。此外,惠普的旗下的Palm已经宣布他们的webOS下一个版本将会包括CouchDB本地数据同步服务。... 全文

CouchDB Android SDK Android

1 2 3 4 5 6 7 8