作者phycheout (等待红颜老)
看板Database
标题[Mongo]用c#对庞大资料做find()问题
时间Tue Oct 22 05:34:16 2019
大家好,我是芒果新手,刚开始就遇到瓶颈,想请教大家该怎麽做比较好
我不确定我的问题应该要在C#版问还是这里问,如果有违反版归请告知
我有一个collection(暂时称作A collection),里面有大约20亿个documents
这些documents 大概长成这样
{
_id: ObjectId{xxxx..},
sId: 1 (1~65535),
field3: "xxxx",
field4: .....
}
当我在server上直接下query, 大概5-10秒内可以把资料吐回来
但我用c#写个简单的program去捞资料
var client = new MongoClient(connStr);
var db = client.GetDatabase("test");
var collection = db.GetCollection<Item>("A");
var filter = Builder<Item>.Filter.Eq("sId",1);
var list = collection.Find(filter).ToList();
在list这边就会卡住...
我想应该是 1)资料量太大 2)sId没有做indexing
目前我想到的解决方式就是把sId加上index
问题一: 面对这麽大量的资料, 我该如何有效率地透过application去获取资料?
问题二: 如果把某些栏位加上index, 会不会导致在插入新资料时变得很慢?
问题三: 如果我的搜寻条件里包含好几个栏位, 我是不是每一个栏位都要加上index?
将近20亿笔资料真的很头痛,而且每天都不断的增加...
请问有人能够给我一盏明灯吗?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 143.111.84.205 (美国)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Database/M.1571693660.A.C01.html
1F:推 noworneverev: 用SP在SQL下完再传回来会不会比较有效率 10/25 07:14
2F:推 jass970991: 感觉跟c#没啥关系 10/26 10:02
3F:→ jass970991: 我是指卡住部分 10/26 10:03
4F:推 jass970991: 你所需要的应该是housekeeping, 10/26 10:06
5F:推 jass970991: 第二个问题是一定的,第三个问题我不确定,但我认为 10/26 10:09
6F:→ jass970991: 不用,不过某些db在query的时候,那些filter的位置和 10/26 10:09
7F:→ jass970991: 顺序是重要的 10/26 10:09
8F:推 jj2236789: 要不要加 oid 以外的 index、加什麽种类的 index、加多 10/28 19:30
9F:→ jj2236789: 少 index 要看你的资料用途。 10/28 19:30
10F:→ jj2236789: 你可以先看一下查询的执行计划,同时确认实务上的需求 10/28 19:42
11F:→ jj2236789: ,假如资料一次吐几十万笔这是必要的吗?能不能做分页 10/28 19:42
12F:→ jj2236789: 查询。 10/28 19:42