当前位置: 首页 > 面试题库 >

CouchBase与Memcached混合在一起,大多数CouchDB哲学和功能丢失了吗?

后源
2023-03-14
问题内容

到目前为止,我使用较新版本的 CouchBase 的唯一方法是通过
memcached Client 。我使用
Erlang 作为编程语言,因此我为自己准备了一个 Erlang Memcached
Client

。我注意到该客户端通过erlang:term_to_binary/1 and erlang:binary_to_term/1在从
memcached 发送和接收数据时使用erlang术语(包括键和值)对它们进行序列化和反序列化。

设置CouchBase时,要求我们选择内存缓存存储区或CouchBase存储区(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”:{
    “值”:{
                “ content_type”:“应用程序/内容流”,
                “ revpos”:2
                “ digest”:“ md5-n3mJhf2kKVQtkIunIbCJZQ ==”,
                “长度”:13
                “存根”:是
            }
        }
    }

2.结果,无法通过 CouchDB视图
搜索,操纵此数据。获取数据的唯一方法是通过“键”,但是可以嵌套一个对象。使用原始的Couch DB,我们可以编写 Advanced Views,Map
reduce

来搜索和操作数据库中的JSON数据等

3。因此,我们不能像使用Couch DB 那样清楚地使用Couch Base的
Couch应用程序
设计文档
,因为这些功能适用于Couch中的JSON数据处理。

问题
1.我知道CouchBase正在寻找一种与CouchDB不同的方法,但是,作为一名开发人员,我觉得很多东西已经被我们带走了。没有更多的Couch应用程序,设计文档,视图等?
2.可能我在这里出了点问题,请问有人可以告诉我如何仍然可以像使用原始Couch DB一样使用Couch Base进行所有这些操作吗?
3.除了Erlang内存缓存客户端以外,还有其他方法(使用erlang)在Couch Base
1.8及更高版本中插入,读取或更新数据吗?这是因为,存在数据序列化,使该数据对同一项目中的其他技术无法使用,因为它们可能无法解码Erlang数据结构
4。在一个多语言项目中,我们有PHP开发人员,C ++,Erlang,Ruby等等,在同一个Couch
Base实例(数据库)上进行数据序列化时,我们应该如何跨所有技术访问和理解数据?

有人协助指出了从CouchDB到Couch Base的变化,解释了为什么新的Couch
Base如此依赖于Memcached,以至于我们不得不使用memcached客户与CouchBase进行对话。另外,如果还有另一个Erlang-to-
CouchBase SDK,它可以帮助我从Couch Base到Couch Base讲JSON(而不是序列化的数据),那么我希望对此有所帮助。

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


问题答案:

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

我通过了Couchbase网站和Couchbase服务器文档使用了不同的API(红宝石,php),但没有发现关于view或map-
reduce的任何信息。参见文档: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的路线图等,并研究它是否真的满足您的需求。



 类似资料:
  • 好的,我正在为我的网络课程编程,我必须使用UDP在Java中实现一个项目。我们正在实现一个HTTP服务器和客户端以及一个“gremlin”函数,该函数以指定的概率破坏数据包。HTTP服务器必须在应用层将一个大文件分成多个段,然后通过UDP发送到客户端。客户端必须在应用层重新组装接收到的段。然而,我想知道的是,如果UDP根据定义是不可靠的,为什么我必须在这里模拟不可靠? 我的第一个想法是,也许这仅仅

  • 定律1:我们知道,在任何一张左撇子和右撇子哲学家混合的桌子上,僵局都不会发生。我非常熟悉它的证明。 最近我在采访中遇到了以下问题。 有五位哲学家坐在圆桌旁。两个筷子之间各有一个哲学家。每个哲学家都需要两支筷子吃饭。我们有两种哲学家:左撇子和右撇子。左手先用左手拿筷子。右手先用右手拿筷子。假设五位哲学家中至少有一位左撇子和一位右撇子。以下哪一项是正确的: a) 独立于圆桌会议上的哲学家组合,没有僵局

  • 问题内容: 嗨,我有这段代码将从数据库中提取客户端名称和地址。它会在while循环中将下拉菜单()中的每个条目的客户端名称呼出。然后,我有了一个Javascript,当您在下拉列表中选择一个选项时,该Javascript会更改名为“ content”的DIV的innerHTML-基于从数据库中提取的内容,这是唯一的。-这是我无法使用的地方。.下面是我的代码,非常感谢您的帮助。 问题答案: 在执行J

  • 问题内容: 我目前正在做一个包含多重匹配和功能得分的查询。JSON的重要部分如下所示: 但是,我也想包括不一定与查询匹配但具有大于0的特定数值的结果。我认为布尔查询可以做到这一点,但是我不知道如何将布尔查询与功能分数查询。 我知道多重匹配查询只是布尔查询的简写,我可以将多重匹配查询扩展到其布尔匹配部分,但是,我不知道如何在其中进行功能评分。 有任何想法吗?顺便说一下,我的版本是1.1.0。 问题答

  • 我正在用Java编写一个客户端-服务器应用程序,客户端和服务器可以通过UDP套接字进行交互,通过TCP套接字进行乒乓交互,用户(客户端)可以通过TCP套接字进行聊天。 我有两个独立的TCP和UDP线程。我将服务器的TCP和UDP功能融合在一起(只需启动TCP和UDP线程)。但我该如何为客户做这件事呢? 我在这里浏览了以下几页: 1)这个家伙为两个独立的客户端分离了TCP和UDP:一个服务器中的Ja

  • 问题内容: 我在其中有3个表的数据库:A,B,C 答:(项目,数量,位置);B :(项目,数量,位置);C:(Item,Loc1,Loc2,Loc3,Loc4 .......,Loc16); 我需要一个用于自动计算并通过以下方式自动更新C上的值的函数: Sum(A.qty)-Sum(B.Qty)其中A.Item = B.Item和A.Loc = B.Loc; 结果应在C中的正确列中更新:从Loc1