自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳解Qt 中如何提高Sqlite讀寫(xiě)速度

移動(dòng)開(kāi)發(fā)
本文介紹的是在Qt 中如何提高Sqlite讀寫(xiě)速度,SQLite數(shù)據(jù)庫(kù)是支持事務(wù)操作的,于是我們就可以通過(guò)事務(wù)來(lái)提高數(shù)據(jù)庫(kù)的讀寫(xiě)速度。先來(lái)看詳細(xì)內(nèi)容。

Qt 中如何提高Sqlite讀寫(xiě)速度 是本文要介紹的內(nèi)容,SQLite數(shù)據(jù)庫(kù)本質(zhì)上來(lái)講就是一個(gè)磁盤(pán)上的文件,所以一切的數(shù)據(jù)庫(kù)操作其實(shí)都會(huì)轉(zhuǎn)化為對(duì)文件的操作,而頻繁的文件操作將會(huì)是一個(gè)很好時(shí)的過(guò)程,會(huì)極大地影響數(shù)據(jù)庫(kù)存取的速度。例如:向數(shù)據(jù)庫(kù)中插入100萬(wàn)條數(shù)據(jù),在默認(rèn)的情況下如果僅僅是執(zhí)行query.exec("insert into DataBase(......) values(......)");就會(huì)打開(kāi)和關(guān)閉文件100萬(wàn)次,所以速度當(dāng)然會(huì)很慢。SQLite數(shù)據(jù)庫(kù)是支持事務(wù)操作的,于是我們就可以通過(guò)事務(wù)來(lái)提高數(shù)據(jù)庫(kù)讀寫(xiě)速度。事務(wù)的基本原理是:數(shù)據(jù)庫(kù)管理系統(tǒng)首先會(huì)把要執(zhí)行的sql語(yǔ)句存儲(chǔ)到內(nèi)存當(dāng)中,只有當(dāng)commit()的時(shí)候才一次性全部執(zhí)行所有內(nèi)存中的數(shù)據(jù)庫(kù)。下面是一個(gè)簡(jiǎn)單的QT sqlite數(shù)據(jù)庫(kù)事務(wù)的例子:

  1. #include <QtCore/QCoreApplication> 
  2. #include <QtSql> 
  3. #include <iostream> 
  4.  
  5. using namespace std;  
  6.  
  7. int main(int argc, char *argv[])  
  8. {  
  9. QCoreApplication a(argc, argv);  
  10. QSqlDatabase    db_sqlite = QSqlDatabase::addDatabase("QSQLITE", "connSQLite");  
  11. db_sqlite.setDatabaseName("SQLiteDB.db3");  
  12. db_sqlite.open();  
  13. QSqlQuery   query("", db_sqlite);  
  14. bool    bsuccess = false;  
  15. QTime    tmpTime;  
  16.  
  17. // 開(kāi)始啟動(dòng)事務(wù)  
  18. db_sqlite.transaction();  
  19. tmpTime.start();  
  20. for(int i = 0; i<100000; i++)  
  21. {  
  22.    bsuccess = query.exec("insert into DataBase(D_1,D_2,D_3,D_4,D_5) values('TT','TT','TT','TT','TT')");  
  23.    if (!bsuccess)  
  24.    {  
  25.     cout<<"Error occur"<<endl;  
  26.     break;  
  27.    }  
  28. }  
  29. // 提交事務(wù),這個(gè)時(shí)候才是真正打開(kāi)文件執(zhí)行SQL語(yǔ)句的時(shí)候  
  30. db_sqlite.commit();   
  31. cout<<"10000條數(shù)據(jù)耗時(shí):"<<tmpTime.elapsed()<<"ms"<<endl;  

其實(shí)QT 操作sqlite數(shù)據(jù)庫(kù)增加事務(wù)的功能就是上面例子中藍(lán)色字體標(biāo)出的兩句話,如果去掉這兩句話,程序又會(huì)還原為:打開(kāi)文件——執(zhí)行query.exec(...)——關(guān)閉文件。大家可以試一下,添加這兩句即增加事務(wù)以后數(shù)據(jù)插入的速度明顯提高很多。

在入庫(kù)和更新過(guò)程中按照數(shù)據(jù)庫(kù)事務(wù)的思想進(jìn)行設(shè)計(jì):SQLite執(zhí)行入庫(kù)、更新操作的方式是,sql語(yǔ)句執(zhí)行對(duì)象句柄調(diào)用庫(kù)函數(shù)打開(kāi)文件、調(diào)用函數(shù)執(zhí)行sql語(yǔ)句、關(guān)閉文件。這樣的執(zhí)行方式對(duì)于數(shù)量級(jí)別超大的文件的弊端就是每次執(zhí)行sql語(yǔ)句的時(shí)候都要打開(kāi)文件(假設(shè)***數(shù)量級(jí)的數(shù)據(jù),就要打開(kāi)和關(guān)閉文件百萬(wàn)次),對(duì)于數(shù)據(jù)庫(kù)的入庫(kù)和更新操作時(shí)間主要都浪費(fèi)到了文件的打開(kāi)和關(guān)閉操作上,所以這里增加事務(wù)以解決該問(wèn)題。

小結(jié):關(guān)于詳解Qt 中如何提高Sqlite讀寫(xiě)速度的內(nèi)容介紹完了,希望本文對(duì)你有所幫助。更多關(guān)于數(shù)據(jù)庫(kù)的內(nèi)容請(qǐng)參考編輯推薦。

責(zé)任編輯:zhaolei 來(lái)源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-07-04 17:18:23

Qt SQLite 數(shù)據(jù)庫(kù)

2011-11-17 15:30:34

JavaNIOIO

2011-07-04 17:26:00

Qt SQLite

2011-07-01 14:06:57

Qt sqlite

2016-09-07 15:02:03

ElasticSear索引速度

2024-06-27 11:00:07

2011-07-05 17:54:43

QT Sqlite ARM

2011-08-22 16:26:25

IOS開(kāi)發(fā)Sqlite數(shù)據(jù)庫(kù)

2011-07-05 10:44:51

Qt Sqlite 靜態(tài)編譯

2009-11-04 13:38:34

.NET緩存

2011-05-30 13:28:00

PHP

2011-08-30 14:15:34

QTSQLite數(shù)據(jù)庫(kù)

2011-06-14 11:48:38

Webkit QT

2011-07-05 10:22:44

Qt Sqlite

2011-05-19 11:33:38

數(shù)據(jù)庫(kù)訪問(wèn)速度

2019-09-24 09:25:05

Vue項(xiàng)目加載

2011-07-05 14:46:34

2022-04-27 09:24:22

前端代碼速度

2009-10-16 08:48:08

2011-06-24 09:13:30

QT SDL
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)