sqlite3資料庫最大可以是多大?可以存放多少資料?讀寫效能怎麼樣?
阿新 • • 發佈:2022-01-10
sqlite是款不錯的資料庫,使用方便,不需要事先安裝軟體,事先建表。很多人擔心它的效能和資料儲存量問題。
比如有的網友問:Sqlite資料庫最大可以多大呀?會不會像acc資料庫那樣,幾十MB就暴掉了?
不會的,放心用SQLite, 這是兩個數量級的東西, 看下面的說明。
Access不能算真正意義上的資料庫,但是Access是前臺和後臺在一起,對小使用者還是有其優點。
SQLite,是一款輕型的資料庫,是遵守ACID的關係型資料庫管理系統,它的設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它,它佔用資源非常的低,在嵌入式裝置中,可能只需要幾百K的記憶體就夠了。它能夠支援Windows/Linux/Unix等等主流的作業系統,同時能夠跟很多程式語言相結合,比如 Tcl、C#、PHP、Java等,還有ODBC介面,同樣比起Mysql、PostgreSQL這兩款開源的世界著名資料庫管理系統來講,它的處理速度比他們都快。SQLite第一個Alpha版本誕生於2000年5月。 至今已經有14個年頭,SQLite也迎來了一個版本 SQLite 3已經發布。
根據SQLite的官方提示:http://www.sqlite.org/limits.html
SQLIte資料庫最大支援128TiB
此外,關於效能。本人也在網上查了大量資料:
在2011年,有網友發表觀點:
“不得了了,在7G檔案大小下,6千萬條記錄的有索引某個表中,查詢條件如果是索引欄位,不管什麼位置,查詢都不要1ms時間。”
“但如果查詢條件不是索引欄位的話,最後一條記錄的查詢竟然需要589秒啊,不是ms啊。在1千萬條記錄前插入1百萬條記錄需要120秒,在6千萬條記錄後插入1百萬條記錄需要156秒。“
SQLite極致效能提升方法:
關閉同步,Synchronous=Off,提升效能。添刪改操作時不必同步等待寫入磁碟,作業系統會延遲若干毫秒批量寫入
設定WAL模式,Journal Mode=WAL,減少鎖定。寫入向前日誌模式,避免多執行緒訪問時鎖定資料庫,寫入時不必使用排它鎖影響其它執行緒讀取,而是把事務操作寫入到WAL檔案中,延遲合併
加大快取,Cache Size=5000,提升效能。作業系統通過檔案對映MapFile把整個資料庫檔案對映進入記憶體,實際查詢時會把用到資料所在附近頁預先載入進入快取,極大提升查詢效能
插入速度 5000~16000tps,依賴CPU,HDD/SSD差別不大,主要受限於SQLite.Data.dll的Prepare
查詢速度 非首次查詢,快取命中以後,索引查詢基本上都是毫秒級。資料庫較大則相應加大快取,速度不變。
查記錄數 單表資料超過一千萬行以後,儘量不要使用Select Count,否則可能需要十幾秒到半分鐘的樣子才能返回。NewLife.XCode封裝了'Meta.Count'
當然,SQLite不適合多執行緒高併發寫入,多執行緒高併發讀取倒是非常不錯。
因為資料庫就在程序內,高併發讀取一般比其它RDS要快一大截。
總的來說,SQLite資料庫甭管多少資料多大庫檔案,只要配置得當,記憶體管夠,效能不是太大問題!
SQLite大資料測試
為了驗證SQLite的效能巔峰,我們來做一個大資料測試。
模擬每天4億票銷售訂單,分表分庫,每天一個數據庫檔案,有訂單號、部門節點、時間等。
1, Test專案生成4億行訂單資料,主鍵自增ID,訂單號建立索引,檔案大小26.5G
2, Web專案,魔方+XCode,首次查詢較慢,約427毫秒,需要預熱
不同機器的首次查詢時間偏差比較大,最大可能達到幾秒鐘
本機第一次啟動該專案時,魔方需要從公網下載SQLite驅動檔案以及樣式資原始檔
3, 第二頁,99毫秒,作業系統檔案對映快取生效
4, 第20000頁,147毫秒,系統快取依然生效
5, 第200000頁,32021毫秒,距離太遠,檔案系統快取沒有命中
6, 第200001頁,867毫秒,快取命中
7, 查詢一箇中間訂單號000199999980,20毫秒,索引命中
顯然,只要有索引,多大資料都不怕。
8, 本地記憶體佔用150M。雖然整個資料庫26.5G
對於重要程度不是特別高的場合,可以大量使用SQLite庫儲存歷史資料,平時用不到的時候只佔硬碟,不佔記憶體
9, 記錄數Select Count(select count(*)from xxx),362058毫秒,約6分鐘,超級慢,這建議進行這種操作。 轉:https://www.cnblogs.com/derekhan/p/10897421.html