【发布时间】:2015-11-04 00:58:47
【问题描述】:
我有 Couchbase 社区版 v4,构建 4047。在我开始针对简单视图发出查询之前,一切似乎都很棒。视图只是像这样投影文档,这似乎无害:
function (doc, meta) {
if(doc.applicationId){
emit(doc.applicationId,meta.id);
}
}
我正在使用 .Net 客户端连接并从我的应用程序执行查询,但我认为这并不重要。这是一个单节点配置。我在实际的 http 请求之间计时,如果我通过 Fiddler 一次发送 15 个请求,则查询需要 4 秒到 2 分钟以上。
我正在使用陈旧的索引来尝试延长该时间,但它似乎没有太大影响。桶不是很大。存储桶中只有几个文档。我为索引分配了 100M RAM。我认为至少对于我们目前正在处理的少数文件来说这很好。
这主要是本地开发,但我们在提升到我们的服务器时观察到类似的行为。服务器也不会使用大量 RAM,但同时我们也不会存储大量文档。我们最多只谈论10个或20个?这些文档仅包含 5 个基本类型的属性。
您对诊断有什么建议吗?据我所知,通过 couchbase 管理控制台的日志没有显示任何异常,这似乎不是正常行为。
更新: 这是我查询文档的代码
public async Task ExpireCurrentSession(string applicationId)
{
using (var bucket = GetSessionBucket())
{
var query = bucket
.CreateQuery("activeSessions", "activeSessionsByApplicationId")
.Key(applicationId)
.Stale(Couchbase.Views.StaleState.Ok);
var result = await bucket.QueryAsync<string>(query);
foreach (var session in result.Rows)
{
await bucket.RemoveAsync(session.Value);
}
}
}
【问题讨论】:
-
你能贴出你用来查询索引的c#代码sn-p吗?特别是,如何创建参数并将其添加到 QueryView arg。另外,为什么要发出 meta.id 作为值?无论如何,视图都会自动将原始文档的 id 发送到索引中(您从查询中获得的每一行结果都有一个 Id 属性。)
-
嗨大卫,我发布了查询的代码。至于为什么我在它已经是文档的一部分时提取 id 是因为我真的不想要整个文档。没有必要传输所有内容。我只想提取包含特定应用程序 ID 的所有内容的 ID。谢谢。
标签: couchbase