SQLite單表4億訂單,大數(shù)據(jù)測試
SQLite
作為嵌入式數(shù)據(jù)庫的翹楚,廣受歡迎!
新生命團(tuán)隊(duì)自2010年以來,投入大量精力對SQLite
進(jìn)行學(xué)習(xí)研究,成功應(yīng)用于各系統(tǒng)非致命數(shù)據(jù)場合。
SQLite極致性能
關(guān)閉同步,Synchronous=Off,提升性能。添刪改操作時(shí)不必同步等待寫入磁盤,操作系統(tǒng)會(huì)延遲若干毫秒批量寫入
設(shè)置WAL模式,Journal Mode=WAL,減少鎖定。寫入向前日志模式,避免多線程訪問時(shí)鎖定數(shù)據(jù)庫,寫入時(shí)不必使用排它鎖影響其它線程讀取,而是把事務(wù)操作寫入到WAL文件中,延遲合并
加大緩存,Cache Size=5000,提升性能。操作系統(tǒng)通過文件映射MapFile把整個(gè)數(shù)據(jù)庫文件映射進(jìn)入內(nèi)存,實(shí)際查詢時(shí)會(huì)把用到數(shù)據(jù)所在附近頁預(yù)先加載進(jìn)入緩存,極大提升查詢性能
插入速度 5000~16000tps,依賴CPU,HDD/SSD差別不大,主要受限于SQLite.Data.dll的Prepare
查詢速度 非首次查詢,緩存命中以后,索引查詢基本上都是毫秒級(jí)。數(shù)據(jù)庫較大則相應(yīng)加大緩存,速度不變。
查記錄數(shù) 單表數(shù)據(jù)超過一千萬行以后,盡量不要使用Select Count,否則可能需要十幾秒到半分鐘的樣子才能返回。NewLife.XCode封裝了'Meta.Count'
當(dāng)然,SQLite不適合多線程高并發(fā)寫入,多線程高并發(fā)讀取倒是非常不錯(cuò)。
因?yàn)閿?shù)據(jù)庫就在進(jìn)程內(nèi),高并發(fā)讀取一般比其它RDS要快一大截。
總的來說,SQLite數(shù)據(jù)庫甭管多少數(shù)據(jù)多大庫文件,只要配置得當(dāng),內(nèi)存管夠,性能不是太大問題!
SQLite大數(shù)據(jù)
為了驗(yàn)證SQLite的性能巔峰,我們來做一個(gè)大數(shù)據(jù)測試。
模擬每天4億票銷售訂單,分表分庫,每天一個(gè)數(shù)據(jù)庫文件,有訂單號(hào)、部門節(jié)點(diǎn)、時(shí)間等。
1, Test項(xiàng)目生成4億行訂單數(shù)據(jù),主鍵自增ID,訂單號(hào)建立索引,文件大小26.5G
2, Web項(xiàng)目,魔方+XCode,首次查詢較慢,約427毫秒,需要預(yù)熱
不同機(jī)器的首次查詢時(shí)間偏差比較大,最大可能達(dá)到幾秒鐘
本機(jī)第一次啟動(dòng)該項(xiàng)目時(shí),魔方需要從公網(wǎng)下載SQLite驅(qū)動(dòng)文件以及樣式資源文件
3, 第二頁,99毫秒,操作系統(tǒng)文件映射緩存生效
4, 第20000頁,147毫秒,系統(tǒng)緩存依然生效
5, 第200000頁,32021毫秒,距離太遠(yuǎn),文件系統(tǒng)緩存沒有命中
6, 第200001頁,867毫秒,緩存命中
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26