我有Couchbase社区版v4,编译版本4047.一切似乎都很棒,直到我开始发布针对简单视图的查询。该视图仅仅状地突出的单据,这似乎是无害的:Couchbase性能
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#代码?特别是,你如何创建和向QueryView arg添加参数。另外,你为什么发出meta.id作为价值?无论如何,该视图会自动将原始文档的ID发送到索引中(您从查询中获得的每一行结果都有一个Id属性。) –
嗨大卫,我发布了查询的代码。至于为什么我提取id时它已经是文档的一部分,因为我真的不想要整个文档。没有必要传输一切。我只是想把所有包含特定应用程序标识的id都拉出来。谢谢。 – Fratt