存储couchbase视图的最佳实践

存储couchbase视图的最佳实践,couchbase,couchbase-view,Couchbase,Couchbase View,我的应用程序具有couchbase视图(map reduce)。目前,我正在将它们写在一个文本文件中,并从couchbase管理页面为每个新couchbase服务器加载它们(繁琐且容易出错的过程) 当我部署一个新的couchbase服务器或创建一个新的bucket时,我是否可以将所有这些视图从文本文件加载到couchbase中 我记得在mysql中,我们曾经将所有的insert查询和过程写入一个文件,并将每个新实例的文件提供给mysql(通过命令提示符)。couchbase有这样的策略吗?从您之

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

当我部署一个新的couchbase服务器或创建一个新的bucket时,我是否可以将所有这些视图从文本文件加载到couchbase中


我记得在mysql中,我们曾经将所有的insert查询和过程写入一个文件,并将每个新实例的文件提供给mysql(通过命令提示符)。couchbase有这样的策略吗?

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

使用JavaSDK1.4.x 您必须以某种方式以字符串的形式加载视图定义(映射函数、reduce函数、将它们放在哪个设计文档中)。请参阅上的文档

基本上,您可以在通过
CouchbaseClient
插入数据库的
DesignDocument
中创建
ViewDesign

DesignDocument designDoc=新设计文档(“啤酒”);
designDoc.setView(新视图设计(“按名称”,“函数(doc,meta){”+
“如果(doc.type==\”啤酒\“&&doc.name){”+
emit(doc.name,null)+
"  }" +
"}"));
client.createDesignDoc(designDoc);
使用JavaSDK2.0.x 同样,您必须以字符串的形式加载视图定义(映射函数、reduce函数,在设计文档中放置它们)

然后处理
DesignDocument
,向其中添加
DefaultView
,并通过
bucket
BucketManager
将设计文档插入bucket中:

List viewsForCurrentDesignDocument=newarraylist(viewCountForCurrentDesignDoc);
//... 对于加载的每个视图定义
View v=DefaultView.create(viewName、viewMapFunction、viewReduceFunction);
viewsForCurrentDesignDocument.add(v);
//... 然后创建正确的设计文档
DesignDocument DesignDocument=DesignDocument.create(designDocName,viewsForCurrentDesignDocument);
//您可以选择将其作为开发设计文档插入,检索现有文档并更新,等等。。。
targetBucket.bucketManager().insertDesignDocument(设计文档);
目前,我们在一些服务器端应用程序中使用couchbase,在开发环境中使用docker映像。 我编写了两个脚本,用于转储现有的couchbase并从转储的数据重新创建couchbase存储桶和视图

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

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

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


如果您觉得这很有帮助,并且有需要添加的内容,请在github上创建一个问题或作出贡献。

请投票并对Couchbase管理控制台的打开功能请求发表评论:添加在UI中导入/导出视图的功能Couchbase管理控制台有一个打开的功能请求:添加在UI中导入/导出视图的功能嗯,我想避免编写Java程序来设置DB。我认为CouchBase会提供更成熟的解决方案。尽管如此,由于couchbase目前不提供任何其他解决方案,我接受这个答案,并编写Java代码来创建视图。谢谢