【发布时间】:2012-03-16 19:21:22
【问题描述】:
到目前为止,我使用较新版本的 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。由于数据序列化,对象作为附件接收。即使从 Erlang 作为 JSON 发送,它们也作为二进制数据发送,这对 CouchBase(或 Memcached?)没有任何意义
2。因此,无法通过 CouchDB views 搜索和操作此数据。获取数据的唯一方法是通过“键”,但对象可能是嵌套的。使用原始的 Couch DB,我们可以编写 Advanced Views, Map reduce 来搜索和操作数据库 e.t.c 中的 JSON 数据
3.因此,我们不能像过去对 Couch DB 所做的那样,将 Couch Apps 和 Design Documents 与 Couch Base 一起使用,因为这些功能适用于 JSON Couch 中的数据处理。
问题
1.我知道 CouchBase 正在寻找一种与 CouchDB 不同的方法,但是,作为一名开发人员,我觉得我们失去了很多东西。没有更多的沙发应用程序、设计文档、视图等?
2。可能,我在这里遇到了问题,有人可以告诉我如何像使用原始 Couch DB 一样使用 Couch Base 完成所有这些操作吗?
3。除了 Erlang memcached 客户端之外,还有其他方法可以在 Couch Base 1.8 及更高版本(使用 erlang)中插入、读取或更新数据吗?这是因为,数据序列化使得这些数据对同一项目中的其他技术无用,因为它们可能无法解码 Erlang 数据结构
4。在一个多语言项目中,我们有 PHP 开发人员、C++、Erlang、Ruby 等。使用相同的 Couch Base 实例(数据库),通过数据序列化,我们应该如何跨所有技术访问和理解数据?
有人帮忙指出从 CouchDB 到 Couch Base 的变化,解释为什么新的 Couch Base 如此依赖于 Memcached,以至于我们不得不使用 memcached 客户端与 CouchBase 对话。此外,如果有另一个 Erlang-to-CouchBase SDK 可以帮助我在 Couch Base 之间使用 JSON(而不是序列化数据),我希望能够亲自动手。
** 编辑 **
假设以下内容:CouchBase x86_64 1.8.0 和 Erlang OTP R15B。我需要在 Couch Base 中处理 JSON 数据,以便在大型多语言项目中,我们的应用程序操作相同的数据集而不会遇到序列化挑战。谢谢
【问题讨论】:
-
我正面临同样的问题,因为完全有效的 json 被存储为 couchbase 服务器中的二进制数据。
-
我刚回到 CouchDB。
标签: java javascript python erlang couchdb