Java CouchBase与Memcached混合,丧失了大多数CouchDB理念和功能?

Java CouchBase与Memcached混合,丧失了大多数CouchDB理念和功能?,java,javascript,python,erlang,couchdb,Java,Javascript,Python,Erlang,Couchdb,到目前为止,我使用较新版本的的唯一方法是使用。我使用作为编程语言,因此我为自己设计了一个。我注意到,当从发送和接收数据时,该客户机通过使用erlang:term\u to\u binary/1和erlang:binary\u to\u term/1将erlang术语(键和值)从二进制转换为二进制来序列化和反序列化它们 在设置CouchBase时,要求我们选择memcached Bucket或CouchBase Bucket(vbuckets)。现在,我选择了CouchBase(因为我需要持久性)

到目前为止,我使用较新版本的的唯一方法是使用。我使用作为编程语言,因此我为自己设计了一个。我注意到,当从发送和接收数据时,该客户机通过使用
erlang:term\u to\u binary/1和erlang:binary\u to\u term/1将erlang术语(键和值)从二进制转换为二进制来序列化和反序列化它们
在设置CouchBase时,要求我们选择memcached Bucket或CouchBase Bucket(vbuckets)。现在,我选择了CouchBase(因为我需要持久性)。我开始使用erlang memcached客户端与设置交互,没关系,我保存erlang术语并从数据库中获取erlang术语。但是,问题从这里开始:

1。由于数据序列化,对象作为附件接收。即使从Erlang作为JSON发送,它们也作为二进制数据发送,这对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 } } } { “_id”:“我的钥匙”, “修订版”:“1-000010fb1a2b02ef0000000d59960000”, “$flags”:38489, “$expiration”:0, “$att_reason”:“无效”, “_附件”:{ “价值”:{ “内容类型”:“应用程序/内容流”, “revpos”:2, “摘要”:“md5-n3mJhf2kKVQtkIunIbCJZQ==”, “长度”:13, “存根”:正确 } } }

二,。因此,这些数据无法通过搜索、处理或删除。获取数据的唯一方法是通过“键”,不管对象是多么嵌套。使用原始的couchdb,我们可以编写搜索和操作数据库e.t.c中的JSON数据

3。因此,我们不能像使用Coach DB那样清楚地使用:和Coach Base,因为这些功能是用于Coach中的JSON数据处理的。

问题
1。我知道CouchBase正在寻找一种不同于CouchDB的方法,然而,作为一名开发人员,我觉得我们已经失去了很多东西。不再有沙发应用程序、设计文档、视图、e.t.c
2。也许,我在这里有点不对劲,有人能告诉我,我怎样才能像使用原始的沙发DB一样使用沙发底座完成所有这些工作吗?
3。除了erlang memcached客户端之外,是否还有其他方法可以插入、读取或更新Coach Base 1.8及更高版本(使用erlang)中的数据?这是因为存在数据序列化,这使得该数据对同一项目中的其他技术毫无用处,因为它们可能无法解码Erlang数据结构
4。在一个多语言项目中,我们有PHP开发人员、C++、Erlang、Ruby e.t.c.,他们使用同一个沙发基实例(数据库),在数据序列化中,我们应该如何访问和理解所有技术的数据?br>
有人指出从CouchDB到CouchBase的变化,解释为什么新的CouchBase与Memcached的联系如此紧密,以至于我们必须使用Memcached客户端与CouchBase对话。另外,如果有另一个Erlang to CouchBase SDK可以帮助我在Coach Base之间使用JSON(而不是序列化数据),我希望能够着手解决它。

**编辑**
假设如下:CouchBase x86_64 1.8.0和Erlang OTP R15B。我需要在coach Base中使用JSON数据,以便在大型多语言项目中,我们的应用程序可以操作相同的数据集,而不会遇到序列化问题。谢谢

CouchDB和Couchbase之间有很大的区别,如果我是对的,Couchbase使用CouchDB存储数据,但不提供/显示视图和CouchDB的其他功能

我浏览了Couchbase网站和Couchbase服务器文档中的不同API(ruby、php),没有找到任何关于view或map reduce的内容。 见文件:

Couchbase看起来更像是一个带有CouchDB支持的持久层的memcache服务器,可能它不适合您的需要。可以存储在其中的数据可以是从int到JSON之类的序列化数据,但在这种情况下,必须在所有端取消序列化

你为什么用Couchbase而不是CouchDB?我没有使用过老式Couchbase版本的经验,但我知道这些名称,即使它们非常相似,也指的是不同的应用程序,如果它真的是您正在考虑的应用程序,也许值得进一步研究

编辑 有趣的链接:阅读评论,里面有很多有趣的东西

从评论中我了解到Damien Katz现在正在开发一个名为Couchbase的新项目,但它不是CouchDB的最新版本,只是另一个NoSQL数据库


因此,如果您习惯于CouchDB,您可以使用CouchDB的最新版本。或者,如果你想考虑切换到Couchbase,看看特点,路线图为2等,并调查它是否真的符合你的需要。< /P> < P>关于Cyprien,你的问题确实有一个真正的答案,除了“不要使用Couchbase”。 Memcache允许比CouchDB更多的数据类型。具体来说,您可以Memcache空字符串、字符串“{”、字符串“0”或字符串“{}”。只有最后一个是可以用作CouchDB文档的有效JSON对象。Couchbase的工作方式是,如果您设置或添加的字符串是有效CouchDB文档的JSON表示形式,它将其存储为CouchDB文档,否则将其存储为附件。[zIt是我不同意的设计决策(他们可能只是在CouchDB文档中插入了一个
$value
键),但考虑到您可能通过协议接口传递非常大的对象、实际的附件,这是有意义的。]不管怎样,
“$att\u reason”:“invalid\u json”
是您的提示,表明正在发生这种情况

即将发布的Couchbase版本2.0正在开发中