[Mongo]用c#對龐大資料做find()問題

看板Database (資料庫)作者 (等待紅顏老)時間5年前 (2019/10/22 05:34), 編輯推噓5(507)
留言12則, 3人參與, 5年前最新討論串1/1
大家好,我是芒果新手,剛開始就遇到瓶頸,想請教大家該怎麼做比較好 我不確定我的問題應該要在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://www.ptt.cc/bbs/Database/M.1571693660.A.C01.html

10/25 07:14, 5年前 , 1F
用SP在SQL下完再傳回來會不會比較有效率
10/25 07:14, 1F

10/26 10:02, 5年前 , 2F
感覺跟c#沒啥關係
10/26 10:02, 2F

10/26 10:03, 5年前 , 3F
我是指卡住部分
10/26 10:03, 3F

10/26 10:06, 5年前 , 4F
你所需要的應該是housekeeping,
10/26 10:06, 4F

10/26 10:09, 5年前 , 5F
第二個問題是一定的,第三個問題我不確定,但我認為
10/26 10:09, 5F

10/26 10:09, 5年前 , 6F
不用,不過某些db在query的時候,那些filter的位置和
10/26 10:09, 6F

10/26 10:09, 5年前 , 7F
順序是重要的
10/26 10:09, 7F

10/28 19:30, 5年前 , 8F
要不要加 oid 以外的 index、加什麼種類的 index、加多
10/28 19:30, 8F

10/28 19:30, 5年前 , 9F
少 index 要看你的資料用途。
10/28 19:30, 9F

10/28 19:42, 5年前 , 10F
你可以先看一下查詢的執行計劃,同時確認實務上的需求
10/28 19:42, 10F

10/28 19:42, 5年前 , 11F
,假如資料一次吐幾十萬筆這是必要的嗎?能不能做分頁
10/28 19:42, 11F

10/28 19:42, 5年前 , 12F
查詢。
10/28 19:42, 12F
文章代碼(AID): #1ThYHSm1 (Database)
文章代碼(AID): #1ThYHSm1 (Database)