你的位置:首页 > 软件开发 > 数据库 > couchbase的简单介绍

couchbase的简单介绍

发布时间:2016-04-30 23:00:35
couchbase作为新兴的NOSQL数据库,可堪使用的资料少的可怜,更别提中文资料了,基本上就是在官网的手册和论坛上查询所需资料,所以这要求有一定的英语基础,词汇量不是问题,不认识的直接百度,关键是语法和耐心要过关,我从刚接触couchbase开始天天啃英文手册也是读得烦躁不安 ...

 

couchbase作为新兴的NOSQL数据库,可堪使用的资料少的可怜,更别提中文资料了,基本上就是在官网的手册和论坛上查询所需资料,所以这要求有一定的英语基础,词汇量不是问题,不认识的直接百度,关键是语法和耐心要过关,我从刚接触couchbase开始天天啃英文手册也是读得烦躁不安,所以耐心十分重要。现在使用的是couchbase 2.2 community版本的,所以手册是这个:http://docs.couchbase.com/couchbase-manual-2.2/。这个手册中,Best Practices 与 Administrators Tasks是关于配置上的说明,Views and Indexs是关于构建数据关系的说明,这三个是最优先需要阅读的章节。Command-line Interface for Administration是讲解配置参数的工具,当具体要配置参数时应仔细阅读这一章节。

如果以前没有nosql的经验,那么理解couchbase的时候关键有两点:延后写入和松散存储。延后写入,顾名思义,couchbase在对数据进行增删时会先体现在内存中,而不会立刻体现在硬盘上,从内存的修改到硬盘的修改这一步骤是由couchbase自动完成,等待执行的硬盘操作会以write queue的形式排队等待执行,也正是通过这个方法,硬盘的I/O效率在write queue满之前是不会影响couchbase的吞吐效率的,而write queue的长度是可以设置的。松散存储也很好理解,在关系型数据库中,要先建库建表,最后插数据,而在couchbase中,bucket就相当于库,没有表的存在,直接就插数据了。关系型数据库依赖表来进行条件查询,couchbase一开始没有具备表功能的结构,所以是无法执行条件查询的,但是通过view则可以手动添加所需要的关系,view的设置是非常复杂的一部分,详情去manul里Views and indexs里学习。总之couchbase的一般逻辑是建bucket——>插入数据——>建立View。正是因为关系可以后天建立,才使得不必预先规划数据应具备的关系,随用随建即可。当然,对couchbase而言插入数据其实是插入json格式的文件。

接下来聊聊couchbase的内存。对于couchbase来说配置内存是很重要的环节,因为couchbase的精髓就在于依赖内存最大化降低硬盘I/O对吞吐量的负面影响。内存资源肯定远远少于硬盘资源,如果数据量小,那么全部数据都放在内存上自然是最优选择,这时候couchbase的效率也是异常高,但是数据量大的时候过多的数据就会被放在硬盘之中。当然,最终所有数据都会写入硬盘,不过有些频繁使用的数据提前放在内存中自然会提高效率。couchbase后台有个进程,专门把一定时间没有被访问的数据移出内存,这个进程的扫描时间和数据的最大无活动时间都是可以设置的。这里有个低水位的概念,也就是说当移除数据过多以至于内存中有效数据占用内存低于低水位的时候,couchbase会随机挑一些文件到内存中以达到低水位。对于所有文件couchbase都会建立一个额外的56byte的metadata,这个metadata功能之一就是表明数据状态,是否活动在内存中。同时文件的key也作为标识符和metadata一起长期活动在内存中。couchbase官方建议bucket申请的内存中,metadata和key所占用的内存不应超过一半,否则couchbase的性能会显著下降。而这个建议我也测试过,准确无误。因此一定内存所能支持的数据条数其实也就一定了,具体算一下就能估摸个大概。为了保证这个条件,显然当有效数据占用超过一定内存时就需要把超额数据移除了,这里有个概念,高水位。当有效数据内存占用超过高水位时,couchbase就会移除数据。高低水位都是可以设置的。

对于配置节点内存的问题,官方给了一个详细的计算公式,如下:

原标题:couchbase的简单介绍

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录