截至目前,我使用较新版 CouchBase 的唯一方法是通过 memcached Client 。我使用 Erlang 作为编程语言,因此我抓住了自己的 Erlang Memcached Client 。我注意到,当发送和接收来自 memcached 的数据时,此客户端使用erlang:term_to_binary/1 and erlang:binary_to_term/1
将erlang术语(包括键和值)串行化并反序列化。
在设置CouchBase时,我们被要求选择memcached存储桶或CouchBase存储桶(vbuckets)。现在,我选择了CouchBase(因为我需要持久性)。我开始使用erlang memcached客户端与设置进行交互,没关系,我保存了erlang术语并从数据库中获取了erlang术语。然而,问题从这里开始:
1。由于数据序列化,对象作为附件被接收。即使作为JSON从Erlang发送,它们也作为二进制数据发送,这对CouchBase(或Memcached?)没有任何意义。
{ "_id": "mykey", "_rev": "1-000010fb1a2b02ef0000000d59960000", "$flags": 38489, "$expiration": 0, "$att_reason": "invalid_json", "_attachments": { "value": { "content_type": "application/content-stream", "revpos": 2, "digest": "md5-n3mJhf2kKVQtkIunIbCJZQ==", "length": 13, "stub": true } } }
答案 0 :(得分:1)
CouchDB与Couchbase之间存在很大差异,如果我是对的,Couchbase使用CouchDB来存储数据,但不提供/呈现CouchDB的视图和其他很好的功能。
我从Couchbase网站和Couchbase服务器文档中浏览了不同的API(ruby,php),但我没有找到任何关于view或map-reduce的信息。 见doc:http://www.couchbase.com/docs/couchbase-manual-1.8.pdf
Couchbase看起来更像是一个带有由CouchDB支持的持久层的内存缓存服务器,可能它不适合您的需求。您可以存储的数据可以是从int到序列化的任何内容,例如JSON,但在这种情况下,您必须在所有目的上反序列化它。
为什么使用Couchbase而不是CouchDB?我没有旧Couchbase版本的经验,但我知道这些名称,即使它们非常相似,也指的是不同的应用程序,如果它真的是你正在思考的那个,它可能值得进一步研究。
修改强> 有趣的链接:http://damienkatz.net/2012/01/the_future_of_couchdb.html也阅读了评论,内容中有很多有趣的内容。
从评论中我了解到Damien Katz现在正致力于这个名为Couchbase的新项目,但它不是CouchDB的最后一个版本,而只是另一个NoSQL数据库。
因此,如果你习惯了CouchDB,你可以使用最新版本的CouchDB。或者,如果您想考虑切换到Couchbase,请查看2.0的功能,路线图等,并调查它是否真的符合您的需求。
答案 1 :(得分:1)
Couchbase和CouchDB之间的关系详见:http://www.couchbase.com/couchdb
简而言之,Couchbase针对主要的NoSQL用例:必须为最终用户交互提供的大数据。用于广告定位的会话存储,用于快速增长的社交游戏的游戏数据存储等。或者任何用户需求可能会出乎意料地增长。
Couchbase是水平可扩展的,而CouchDB则不是。为了获得Couchbase提供的可扩展性和速度,我们不得不削减CouchDB中人们喜欢的一些功能。这是一组不同的权衡,但共同点是JSON和地图缩减索引模型。
答案 2 :(得分:0)
关于西普里安,除了“不要使用Couchbase”之外,你的问题确实有一个真正的答案。
Memcache允许比CouchDB更多的数据类型。具体来说,您可以Memcache一个空字符串,字符串“{”,字符串“0”或字符串“{}”。只有最后一个是可以用作CouchDB文档的有效JSON对象。 AFAIK Couchbase的工作方式是,如果您设置或添加的字符串是有效CouchDB文档的JSON表示形式,则将其存储为CouchDB文档,否则将其存储为附件。 [z这是一个我不同意的设计决策(他们可能刚刚在CouchDB文档中插入了一个$value
键),但考虑到你可以传递非常大的对象,实际的附件,它是有意义的协议接口。]无论如何,"$att_reason": "invalid_json"
是你发现这种情况的暗示。
即将推出的Couchbase 2.0版本现已进入开发者预览版,几乎可以显示所有CouchDB功能,但Couch应用程序除外(如果您使用的是Erlang则无关紧要)。因此,如果你想使用它,你需要通过Memcache接口传递对象的JSON,但请注意,然后你丢失了Memcache的原子快捷键(你需要进行比较和交换,这需要一个额外的网络跳)。