关于SQLite 与 FireBird 利弊分析
一、關于數據庫簡介:?
SQLite??? 主頁:http://www.sqlite.org?
SQLite誕生于2000年5月,這幾年增長勢頭迅猛無比,目前版本是3.3.8。?
SQLite的特點如下:?
1、無需安裝配置,應用程序只需攜帶一個動態鏈接庫。?
2、非常小巧,For Windows 3.3.8版本的DLL文件才374KB。?
3、ACID事務支持,ACID即原子性、一致性、隔離性、和持久性(Atomic、Consistent、Isolated、和 Durable)。?
4、數據庫文件可以在不同字節順序的機器間自由的共享,比如可以直接從Windows移植到Linux或MAC。?
5、支持數據庫大小至2TB。?
6、sqlite無疑是最小的一個,單文件程序,只有400k,而它生成的數據庫文件也是單文件。它支持大部份SQL92標準,不過遺憾的是不支持外鍵與存儲過程?
Firebird 嵌入服務器版(Embedded Server)?? 主頁:http://www.firebirdsql.org?
從Interbase開源衍生出的Firebird,充滿了勃勃生機。雖然它的體積比前輩Interbase縮小了幾十倍,但功能并無閹割。為了體現Firebird短小精悍的特色,開發小組在增加了超級服務器版本之后,又增加了嵌入版本,最新版本為2.0。?
Firebird的嵌入版有如下特色:?
1、數據庫文件與Firebird網絡版本完全兼容,差別僅在于連接方式不同,可以實現零成本遷移。?
2、數據庫文件僅受操作系統的限制,且支持將一個數據庫分割成不同文件,突破了操作系統最大文件的限制,提高了IO吞吐量。?
3、完全支持SQL92標準,支持大部分SQL-99標準功能。?
4、豐富的開發工具支持,絕大部分基于Interbase的組件,可以直接使用于Firebird。?
5、支持事務、存儲過程、觸發器等關系數據庫的所有特性。?
6、可自己編寫擴展函數(UDF)。?
7、firebird其實并不是純粹的嵌入式數據庫,embed版只是其眾多版本中的一個。不過做的也很小,把幾個dll加起來才不到5M,但是它支持絕大部份SQL92與SQL99標準?
二、sqlite和FB比,關于損壞問題:?
1:突然停電或系統突然重啟動導至數據損壞。sqlite對這方面很大程度上避免這個問題方面做得比較好。?
2:加密功能,不用擔心數據被別人復制到別的地方打開。而FB只要能復制到別的地方,隨便可以打開。?
3:頻煩的插入刪除,更新數據,不會導至數據數據庫很快增長。FB數據庫快速度增長是容易導至數據庫損壞的原因。?
這三個問題,是導至一個軟件是否長期使用時的可靠性問題。?
我使用了各種辦法想讓sqlite數據庫出現損壞(在操作數據庫時用突然斷電,強制殺死進程,重新啟動等等),都沒有辦到。而FB這樣折騰一會數據庫文件準壞,且無法修復。?
三、sqlite和FB比,關于性能問題:?
http://www.jbxue.com/db/6334.html
SQLLite操作百萬級數據之優化篇
描述:SQLite數據庫本質上來講就是一個磁盤上的文件,所以一切的數據庫操作其實都會轉化為對文件的操作,而頻繁的文件操作將會是一個很耗時的過程,會極大地影響數據庫存取的速度。
描述:
SQLite數據庫本質上來講就是一個磁盤上的文件,所以一切的數據庫操作其實都會轉化為對文件的操作,而頻繁的文件操作將會是一個很耗時的過程,會極大地影響數據庫存取的速度。例如:向數據庫中插入100萬條數據,在默認的情況下執行相應的操作,就會打開和關閉文件100萬次,所以速度當然會很慢。
分析:
在入庫和更新過程中按照數據庫事務的思想進行設計:SQLite執行入庫、更新操作的方式是,語句執行對象句柄調用庫函數打開文件、調用函數執行sql語句、關閉文件。這樣的執行方式對于數量級別超大的文件的弊端就是每次執行sql語句的時候都要打開文件(假設百萬級數量級的數據,就要打開和關閉文件百萬次),對于數據庫的入庫和更新操作時間主要都浪費到了文件的打開和關閉操作上,所以這里增加事務以解決該問題.
解決:
SQLite數據庫是支持事務操作的,于是我們就可以通過事務來提高數據庫的讀寫速度。事務的基本原理是:數據庫管理系統首先會把要執行的sql語句存儲到內存當中,只有當commit()的時候才一次性全部執行所有內存中的數據庫。同時,在.NET中對數據的操作還可以采用預編優化的方式來提升性能,這種方式是采用IDbCommand的Prepare方法來進行的。
示例:
以下引用網絡上的一個示例數據來說明一下效果
引用地址:http://www.cnblogs.com/Kevin-moon/archive/2008/12/01/1344658.html
A、系統環境
OS:Windows XP Professional Server Pack 3
CPU:AMD K8 3200+(2.2G)
RAM:3G
HD:Seagate 160G IDE 7200RPM
B、代碼環境
NET2.0、Access2003、Firebird 2.1.1.17910、SQLite 3.6.3
Firebird Data Provider(FirebirdSql.Data.FirebirdClient.dll, 2.1.0.0)
SQLite Data Provider(System.Data.SQLite, 1.0.60.0)
下是測試數據,僅予參考
測3次平均,無測10W+,因Firebird出現OutMemoryException
無測修改操作,因無需求
依序 1、10、100、1000、10000 條數據,單位 ms
新增操作
1.無預編, 無事務
Access:41、54、195、1610、16187
Firebird:9、19、189、1929、22125
SQLite:3、27、867、5002、53603
2.事務控制
Access:39、50、162、1278、12366
Firebird:11、30、60、587、5904
SQLite:4、4、10、73、739
3.預編譯優化
Access:43、50、128、908、9100
Firebird:2、13、128、1322、15954
SQLite:4、26、465、4626、54608
4.預編譯+事務控制
Access:42、46、102、676、6355
Firebird:3、4、22、211、2087
SQLite:3、4、8、41、378
查詢比較
Access:39、42、40、51、181
Firebird:2、3、15、131、1294
SQLite:1、1、3、16、165
討論:
Firebird性能不如預期、SQLite性能很好
Access事務支爰不強,但預編啟性能很好
SQLite缺省已預編,加上事務控制性能更好
Access查詢加排序,數據10W+時性能極差(I/O問題)
單測Firebird 10W+新增操作,性能極差(I/O問題)
10W+數據操作性能多卡在I/O,不過SQLite因規格單純,所以性能會較強
總結:
1.通過事務一次提交多條SQL語句,以減少SQLLite數據的IO操作,可以有效提升大數據量操作的性能。
2.通過.NET中的預編譯優化方式,即采用IDbCommand的Prepare方法來配合事務執行大批量SQL操作,可以進一步優化其性能。
總結
以上是生活随笔為你收集整理的关于SQLite 与 FireBird 利弊分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑优化后的数据恢复
- 下一篇: mysql bison_使用flex和b