mongodb效能優化教程

2021-12-29 21:39:53 字數 1562 閱讀 9241

一般來說nosql的插入速度會比mysql等關係型資料庫的要快些才對,上次用golang實現了可以在mysql中以2w+/s速度的插入小資料。理論上mongodb的插入速度應該會比mysql快。但是經過測試發現,每次往mongodb插入一條資料的話,插入速度只有1600次每秒。測試**如下:

package main

import (

"fmt"

"log"

"time"

"strconv"

"gopkg.in/mgo.v2"

)type person struct

func main() ,

direct: false,

timeout: time.second * 1,

database: "admin",

source: "admin",

username: "root",

password: "root",

poollimit: 4096, // session.setpoollimit

}session, err := mgo.dialwithinfo(dialinfo)

if err != nil

defer session.close()

session.setmode(mgo.monotonic, true)

c := session.db("admin").c("test")

/*persons := make(inte***ce{}, 10000)

fmt.println(time.now().unix())

for i := 0; i < 100; i++

}err = c.insert(persons[:]...)

if err != nil }*/

fmt.println(time.now().unix())

for i := 0; i < 1000000; i++ )

if err != nil

}fmt.println(time.now().unix())

}結果:

hello

1517393214

1517393808

可以看出,逐條插入,mongodb相對於mysql是並沒有什麼優勢。其實客觀的說,是因為單個客戶端逐條迴圈單條插入請求給mongodb的複雜壓力並不夠大。下圖為執行過程中的負載機器負載圖,可以看出,磁碟和網路的負載並不大:

優化方案:

1、由於mongodb並沒有事務一說。當併發寫請求的時候,寫入速度肯定會比單客戶端的快。

2、每次寫請求寫多條資料,上面**中注釋去掉即可實現。測試發現每次插入1w條小資料,插入100w條資料只需要9s左右。這還是在普通的pc機中測試。

總結:對於單個客戶端來說,逐條插入的速度會比較慢。如果乙個mongodb的鏈結要在業務尖峰時刻頂住壓力,那就需要一次插入多條資料。不僅限於golang,使用其他語言的對接mongodb介面都是一樣的。

mongodb效能優化

建立索引是優化資料庫最直接的手段.遵循以下索引優化原則,可以建立比較高效和合理的索引.在索引中包含條件的所有列,可以使用索引形成的遮蔽來拒絕結果集中不合適的行 對於需要排序的引用列,適當地建立索引可以避免排序 考慮到管理上的開銷,應避免在索引中使用多於5個的列 對於多列索引,將查詢中引用最多的列放在...

mongodb效能優化

索引對於乙個資料庫的影響相信大家一定了解,如果乙個查詢命令進入到資料庫中後,查詢優化器沒有找到合適的索引,那麼資料庫會進行全集合掃瞄 在rdbms中也叫全表掃瞄 全集合查詢對於效能的影響是災難性的。沒有索引的查詢就如同在詞典那毫無規律的海量詞彙中獲得某個你想要的詞彙,但這個詞典是沒有目錄的,只能通過...

Mongodb的效能優化問題

資料庫效能對軟體整體效能有著至關重要的影響,對於mongodb資料庫常用的效能優化方法主要有 正規化化與反正規化化 填充因子的使用 索引的使用 正規化是為了消除重複資料減少冗餘資料,從而讓資料庫內的資料更好的組織,讓磁碟空間得到更有效利用的一種標準化標準,滿足高等級的正規化的先決條件是滿足低等級正規...