存储couchbase视图的最佳实践

时间:2014-12-06 10:59:26

标签: couchbase couchbase-view

我的应用程序有基础视图(map-reduce)。目前,我正在将它们写在一个文本文件中,并从couchbase管理页面为每个新的couchbase服务器加载它们(繁琐且容易出错的过程)。

在部署新的couchbase服务器或创建新的存储桶时,我是否可以将所有这些视图从文本文件加载到couchbase中?

我记得在mysql中,我们曾经将所有插入查询和过程写入文件,并将文件提供给mysql(通过命令提示符)为每个新实例。是否有任何此类策略可用于couchbase?

2 个答案:

答案 0 :(得分:4)

从您以前的沙发基础相关问题来看,您似乎正在使用java SDK? SDK的1.4和2.0行都允许以编程方式创建设计文档和视图。

使用Java SDK 1.4.x

你必须以某种方式加载你的视图定义(映射函数,简化函数,在哪些设计文档中放置它们),如字符串。请参阅http://docs.couchbase.com/couchbase-sdk-java-1.4/#design-documents上的文档。

基本上,您在ViewDesign中通过DesignDocument在数据库中创建CouchbaseClient

DesignDocument designDoc = new DesignDocument("beers");
designDoc.setView(new ViewDesign("by_name", "function (doc, meta) {" +
    "  if (doc.type == \"beer\" && doc.name) {" +
    "    emit(doc.name, null);" +
    "  }" +
    "}"));
client.createDesignDoc(designDoc);

使用Java SDK 2.0.x

以同样的方式,您必须以某种方式加载视图定义(地图函数,减少函数,在哪个设计文档中放置它们),如字符串。

然后您处理DesignDocument,向其添加DefaultView,然后通过Bucket BucketManager {/ 1>}将设计文档插入到广告位中

List<View> viewsForCurrentDesignDocument = new ArrayList<View>(viewCountForCurrentDesignDoc);
//... for each view definition you loaded
        View v = DefaultView.create(viewName, viewMapFunction, viewReduceFunction);
        viewsForCurrentDesignDocument.add(v);
//... then create the designDocument proper
DesignDocument designDocument = DesignDocument.create(designDocName, viewsForCurrentDesignDocument);
//optionally you can insert it as a development design doc, retrieve an existing one and update, etc...
targetBucket.bucketManager().insertDesignDocument(designDocument);

答案 1 :(得分:3)

Rounds,我们对部分服务器端应用程序使用couchbase,并将docker镜像用于开发环境。 我编写了2个脚本来转储现有的couchbase,并从转储的数据中重新创建couchbase存储桶和视图。

视图std::seed_seqmap函数作为普通javascript文件转储到目录层次结构中,该层次结构表示couchbase中的设计文档和存储桶。将整个目录树提交到您的仓库非常有用,这样您就可以跟踪对视图所做的更改。 由于文件是普通的javascript,您可以使用您喜欢的IDE编辑它们并享受自动语法检查。

您可以使用以下github repo中的脚本:

https://github.com/rounds/couchbase-dump

  

将所有的couchbase存储桶和视图转储为您可以提交到repo的目录层次结构中的javascript文件。然后,您可以从以前转储的数据中重新创建couchbase存储桶和视图。

如果您觉得这很有帮助,可以添加一些内容,请在github上创建一个问题或做出贡献。