【问题标题】:CouchBase mixed with Memcached, loss of most CouchDB philosophies and functionality?CouchBase 与 Memcached 混合,失去了大多数 CouchDB 理念和功能?
【发布时间】: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?)没有任何意义

{ "_id": "我的密钥", "_rev": "1-000010fb1a2b02ef0000000d59960000", “$标志”:38489, “$过期”:0, "$att_reason": "invalid_json", “_附件”:{ “价值”: { “content_type”:“应用程序/内容流”, “revpos”:2, “摘要”:“md5-n3mJhf2kKVQtkIunIbCJZQ==”, “长度”:13, “存根”:真 } } }
2。因此,无法通过 CouchDB views 搜索和操作此数据。获取数据的唯一方法是通过“键”,但对象可能是嵌套的。使用原始的 Couch DB,我们可以编写 Advanced Views, Map reduce 来搜索和操作数据库 e.t.c 中的 JSON 数据

3.因此,我们不能像过去对 Couch DB 所做的那样,将 Couch AppsDesign 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


【解决方案1】:

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

我浏览了 Couchbase 网站和 Couchbase 服务器文档中的不同 API(ruby、php),但没有找到任何关于 view 或 map-reduce 的信息。 见文档:http://www.couchbase.com/docs/couchbase-manual-1.8.pdf

Couchbase 看起来更像是具有由 CouchDB 提供支持的持久层的 memcache 服务器,它可能不符合您的需求。您可以在其中存储的数据可以是从 int 到诸如 JSON 之类的序列化数据的任何数据,但在这种情况下,您必须在所有端都对其进行反序列化。

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

编辑 有趣的链接:http://damienkatz.net/2012/01/the_future_of_couchdb.html 也阅读了 cmets,里面有很多有趣的东西。

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

因此,如果您习惯了 CouchDB,则可以使用 CouchDB 的最新版本。或者,如果您想考虑切换到 Couchbase,请查看功能、2.0 路线图等,并调查它是否真的符合您的需求。

【讨论】:

    【解决方案2】:

    关于 Cyprien,除了“不要使用 Couchbase”之外,您的问题确实有真正的答案。

    Memcache 允许比 CouchDB 更多的数据类型。具体来说,您可以将空字符串、字符串“{”、字符串“0”或字符串“{}”Memcache。只有最后一个是可以用作 CouchDB 文档的有效 JSON 对象。 AFAIK Couchbase 的工作方式是,如果您设置或添加的字符串是有效 CouchDB 文档的 JSON 表示,则它将其存储为 CouchDB 文档,否则将其存储为附件。 [z这是一个我不同意的设计决定(他们可能只是在 CouchDB 文档中插入了一个$value 键),但考虑到您可以通过协议传递非常大的对象、实际附件,这有点道理界面。] 不管怎样,"$att_reason": "invalid_json" 是您正在发生这种情况的暗示。

    即将发布的 Couchbase 2.0 版本现在处于开发者预览版中,它公开了几乎所有的 CouchDB 功能,除了 Couch 应用程序(如果您使用 Erlang 则无关紧要)。因此,如果您想使用它,您需要通过 Memcache 接口传递对象的 JSON,但请注意,您会丢失 Memcache 的原子快捷方式(您需要进行比较和交换,这需要额外的网络跳)。

    【讨论】:

      【解决方案3】:

      这里详细介绍了Couchbase和CouchDB的关系:http://www.couchbase.com/couchdb

      简而言之,Couchbase 的目标是主要的 NoSQL 用例:必须可用于最终用户交互的大数据。诸如用于广告定位的会话存储、用于快速增长的社交游戏的游戏数据存储之类的东西。或者用户需求可能意外增长的任何地方。

      Couchbase 是水平可扩展的,而 CouchDB 不是。为了获得 Couchbase 提供的可扩展性和速度,我们不得不削减人们喜欢 CouchDB 中的一些功能。这是一组不同的权衡,但共同点是 JSON 和 map reduce 索引模型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-25
        • 2013-12-27
        • 2017-03-01
        • 2023-03-25
        • 1970-01-01
        • 1970-01-01
        • 2011-07-31
        • 1970-01-01
        相关资源
        最近更新 更多