在上一篇中,介绍了Couchbase的安装和配置,接下来介绍一些如何使用。
启动和停止服务:
如果安装时设置的有问题,需要重新安装,只需要将服务停止,删除/opt/couchbase/var/lib/couchbase目录下的数据(请保留log目录),再启动服务,通过浏览器连接上去就可以看到熟悉的欢迎界面,全部重新配置即可。
如果PHP安装了memcache扩展,则可以不经任何修改操作Couchbase:
这是原有项目中检测memcache的PHP代码,用couchbase替换掉memcache之后,不用进行任何修改即可使用,端口仍然是11211,set/get等方法完全兼容。这一点很重要,对于已经存在的项目,可以不用修改任何代码和配置文件,这是非常有意义的。
用memcache扩展,只能使用memcache等效功能,对于view等couchbase提供的新功能是无法使用的。要使用新功能,就要安装couchbase扩展才行。
然后编辑php.ini,重启apache,查看php -i —— 奇怪,没有找到couchbase的信息,说明扩展没有成功加载。
将php.ini中的display_startup_errors 设置为ON,再次运行 php -i ,可以看到提示: libcouchbase没有找到。原来需要安装couch_client:
可以看到,couchbase的扩展已经正确安装了。ldconfig是重新扫描指定目录的动态库文件,确保系统能够在需要时正确加载这些文件。
下面写一个简单的测试:
注意: default_m2c 项是在上面代码中,使用memcache接口写入的(封装中自动加入了default_的前缀),使用cachebase的接口正确的读取了出来。再做一个反向的测试,使用couchbase的函数读取memcache函数写入的项,也是可行的。在Data Buckets中,可以从document视图中看到已经存储到couchbase中的数据。这对于调试期来讲是很方便的。
下面,我们来看couchbase带来的新功能: 1,observe , 2,view
Observe提供了对数据操作的监控,提高数据的安全性。比如:
persistto 和 replicateto 参数,可以设定需要物理保存的数量和复制集数量,比如完成指定数量后函数才返回,保证数据安全。
可以进行数据的可靠性测试
view
view的原理是对“某个bucket已经存储到硬盘上的所有数据进行map/reduce操作,并可将结果持久保存"。view的管理界面:
可以看到,首先View是属于某个Bucket,一个View有一个document,下面可以有多个view。view分Development Views和Production Views。前者可以修改,通过Publish按钮转换成生产模式。
我们来看一个例子:
Map
Reduce
PHP生成数据和调用view:
首先,我们写入一些文档型的数据 t1~t4。注意PHP代码中json_encode函数。在管理界面 Data Buckets=>Documents里面可以查看到数据:
执行view时,首先map函数执行,将满足条件”doc.type=='test'"的内容emit出来,结果如下所示:
然后,reduce函数执行,根据奇偶分别进行求和,得出结果:
在PHP的view函数中,第一个参数是文档,第二个是view,第三个是参数。其中,最重要的两个参数:
1,stale : false时,每次都新生成数据;ok,使用上次生成的缓存;update_after,使用缓存数据立刻返回,之后刷新数据
2,reduce: 是否执行reduce函数。如果不执行,则返回所有map后的数据。
既往使用memcache的时候,对其中的数据进行批量处理会是非常困难的事情,couchbase的view功能,使其从单一缓存工具转变为文档型数据库。但是,这个功能也有些蛋疼,要map全部数据,性能上很成问题。可以通过设置更多的bucket,尽量让一类数据放在一个bucket上,可以改善一些。但总体来看瑕不掩瑜,View功能让通过缓冲进行数据统计分析成为可能,这是一个很可喜的事情。
最后,说一下运维中还可能遇到的问题:
1,如何在同一Server下建立多个Bucket?
与membase时类似,默认的bucket是11211端口,可以建立多个Bucket复用这个端口,但是需要客户端连接是通过SLD验证来确定到底连接哪一个Bucket。另一个更实用的办法,是将更多的Bucket分别建立在不同的端口上。这与以往在一台服务器上运行多个memcache实例是相似的。
2,出现某台服务器宕机的情况,数据存取出现异常,怎么回事?
当某个node失效时,在管理界面中可以看到该节点处于down状态。注意,这时PHP连接时,仍然会试图将对此node进行操作,从而返回false。这与我们理解上的集群应该自动保持有效的想法是有差异的。需要手工点击“Fail Over”将此node从服务中屏蔽,之后php才不会对此node进行操作。当节点重新启动后,需要将其恢复回来。根据提示点击“Add Back”,然后视情况决定是否执行Rebalance。
尤其是在只有两个节点时,意味着一个节点失效,如果不及时进行干预,就会有超过一半的请求失败(默认失效节点为主的写和轮询的读),结果会很惨。这看似很傻,其实是为了保证数据有效性。根据官方解释:
A,node少于3个时,必须手工干预;
B,node大于等于3个时,可以通过REST接口设置为“Auto Failover”
C,可以进一步设定,当节点数大于某个数值时,进行自动failover
这样的设定使得大集群可以有效的工作,不会因为运维经验不足导致数据永久损失。这种考虑还是很值得认可的。
Couchbase的使用就介绍到这里。