【发布时间】:2016-07-27 09:10:34
【问题描述】:
我们决定在游戏中使用 mongo db 作为实时数据库,但搜索结果的性能无法接受。这些是包含 15.000 个文档和 17 个字段(字符串、int、float)的测试结果
// 14000 ms
MongoUrl url = new MongoUrl("url-adress");
MongoClient client = new MongoClient(url);
var server = client.GetServer();
var db = server.GetDatabase("myDatabase");
var collection = db.GetCollection<PlayerFields>("Player");
var ranks = collection.FindAll().AsQueryable().OrderByDescending(p=>p.Score).ToList().FindIndex(FindPlayer).Count();
这个是最差的。 //.ToList() 用于测试目的。不要在生产代码中使用。
第二次测试
//9000 ms
var ranks = collection.FindAll().AsQueryable().Where(p=>p.Score < PlayerInfos.Score).Count();
第三次测试
//2000 ms
var qq = Query. GT("Kupa", player.Score);
var ranks = collection.Find( qq ).Where(pa=>(pa.Win + pa.Lose + pa.Draw) != 0 );
有没有其他方法可以使用 C# .Net 2.0 在 mongo 中进行快速搜索。我们想根据用户的得分得到玩家的排名并给他们排名。
【问题讨论】:
-
我不擅长这部分关于 DB 的知识,但也许使用可以为您提供此信息的 API?因此,您只需调用一个页面,服务器就会获取该页面。
-
你能提供你的收藏索引吗?它可能有助于诊断问题
-
只有 1 个索引,即 ObjectId 字段。
-
嘿,如果可能的话,尝试使用 redis 来满足您的要求,因为它更适合您的要求,我建议它作为替代方案,我建议它除了加快处理速度
-
@abhi 感谢您的建议。我会看的。
标签: c# mongodb performance linq unity3d