Qt數(shù)據(jù)庫應(yīng)用之實(shí)現(xiàn)通用數(shù)據(jù)庫清理
一、前言
很多項(xiàng)目如果需要存儲(chǔ)很多日志記錄比如運(yùn)行日志,時(shí)間長(zhǎng)了記錄數(shù)量非常多,數(shù)據(jù)庫體積不斷增大,對(duì)應(yīng)數(shù)據(jù)庫表的增刪改查的效率不斷降低,為了消除這幾個(gè)影響,需要有一套機(jī)制,不斷將早期的數(shù)據(jù)清理,清理的規(guī)則比如可以指定表名、字段名、時(shí)間范圍等。
日志記錄的清理一方面是為了保證查詢效率,畢竟數(shù)據(jù)量大了明顯影響查詢速度,一方面也是為了節(jié)約磁盤存儲(chǔ)空間,畢竟存儲(chǔ)空間有限,尤其是嵌入式板子,容量一般不會(huì)很大,記錄無限制的存儲(chǔ)下去會(huì)不斷增加磁盤空間的占用。
除了數(shù)據(jù)庫記錄的清理以外,還有個(gè)場(chǎng)景是文件的清理,比如視頻監(jiān)控系統(tǒng)存儲(chǔ)了很多視頻文件,為了保證磁盤空間的大小,需要不斷清理不需要的早期的視頻文件,以便騰出空間存儲(chǔ)新的文件,相當(dāng)于覆蓋寫入,這樣就最大化的把磁盤空間利用起來,不會(huì)因?yàn)榇疟P空間不夠而導(dǎo)致的程序不能正常運(yùn)行。
- 可設(shè)置要清理的對(duì)應(yīng)數(shù)據(jù)庫連接名稱和表名。
- 可設(shè)置條件字段。
- 可設(shè)置排序字段。
- 可設(shè)置最大保留的記錄數(shù)。
- 可設(shè)置執(zhí)行自動(dòng)清理的間隔。
- 后期支持多個(gè)數(shù)據(jù)庫和多個(gè)表。
- 建議條件字段用數(shù)字類型的主鍵,速度極快。
- 增加統(tǒng)計(jì)用字段名稱設(shè)置。
- 增加自動(dòng)清理文件夾,超過大小自動(dòng)刪除文件夾中早期文件。
Qt數(shù)據(jù)庫相關(guān)應(yīng)用開發(fā)總結(jié)
二、功能特點(diǎn)
同時(shí)支持多種數(shù)據(jù)庫比如odbc、sqlite、mysql、postgresql、sqlserver、oracle、人大金倉等。
一個(gè)數(shù)據(jù)庫類即可管理本地?cái)?shù)據(jù)庫通信,也支持遠(yuǎn)程數(shù)據(jù)庫通信等。
數(shù)據(jù)庫線程支持執(zhí)行各種sql語句,包括單條和批量。
組件中的所有類打印信息、錯(cuò)誤信息、執(zhí)行結(jié)果都信號(hào)發(fā)出去。
集成數(shù)據(jù)庫通用翻頁類(負(fù)責(zé)具體處理邏輯),搭配分頁導(dǎo)航控件(負(fù)責(zé)外觀),形成超級(jí)牛逼的翻頁控件。
集成數(shù)據(jù)庫自動(dòng)清理類,設(shè)定最大記錄數(shù)后臺(tái)自動(dòng)清理早期數(shù)據(jù)。
集成自定義委托類,支持復(fù)選框、文本框、下拉框、日期框、微調(diào)框、進(jìn)度條等。
同時(shí)支持Qt4-Qt6,親測(cè)Qt4.6到Qt6.3任意版本,任意系統(tǒng)和編譯器。
本組件無故障 360天7乘24小時(shí) 運(yùn)行在至少上萬個(gè)現(xiàn)場(chǎng),商業(yè)級(jí)別品質(zhì)保證。
每個(gè)類都對(duì)應(yīng)完整詳細(xì)的使用示例,注釋詳細(xì),非常適合閱讀學(xué)習(xí)。
可以作為獨(dú)立的程序運(yùn)行,比如自動(dòng)清理早期數(shù)據(jù),同步數(shù)據(jù)到云端。
全部線程處理,不卡界面,自動(dòng)重連數(shù)據(jù)庫。
普通測(cè)試情況,sqlite數(shù)據(jù)庫,數(shù)據(jù)庫發(fā)生器每秒鐘插入1000條記錄約0.003秒鐘,同時(shí)自動(dòng)清理數(shù)據(jù)類每秒鐘刪除1000條記錄約0.13秒,不同線程互不干擾。
三、體驗(yàn)地址
體驗(yàn)地址:https://pan.baidu.com/s/15ZKAlptW-rDcNq8zlzdYLg 提取碼:uyes 文件名:bin_dbtool.zip
國內(nèi)站點(diǎn):https://gitee.com/feiyangqingyun
國際站點(diǎn):https://github.com/feiyangqingyun
四、效果圖
五、相關(guān)代碼
void frmDbClean::on_btnOpen_clicked() { if (ui->btnOpen->text() == "打開數(shù)據(jù)庫") { DbInfo dbInfo; dbInfo.connName = this->objectName(); dbInfo.dbName = AppConfig::DbName3; dbInfo.hostName = AppConfig::HostName3; dbInfo.hostPort = AppConfig::HostPort3; dbInfo.userName = AppConfig::UserName3; dbInfo.userPwd = AppConfig::UserPwd3; QString dbType = AppConfig::DbType3.toUpper(); if (dbType == "SQLITE") { dbInfo.dbName = DbHelper::getDbDefaultFile(); } dbClean->setConnInfo(DbHelper::getDbType(dbType), dbInfo); if (dbClean->openDb()) { //dbClean->start(); ui->btnOpen->setText("關(guān)閉數(shù)據(jù)庫"); } else { QString error = dbClean->getDatabase().lastError().text(); QUIHelper::showMessageBoxError("打開數(shù)據(jù)庫失敗!\n" + error, 3); } } else { dbClean->stop(); dbClean->closeDb(); ui->btnOpen->setText("打開數(shù)據(jù)庫"); ui->btnStart->setText("啟動(dòng)服務(wù)"); on_btnClear_clicked(); } QTimer::singleShot(100, this, SLOT(getTables())); QTimer::singleShot(1000, this, SLOT(on_btnStart_clicked())); } void frmDbClean::on_btnCopy_clicked() { //將數(shù)據(jù)庫設(shè)置參數(shù)一鍵粘貼過來 ui->cboxDbType->setCurrentIndex(ui->cboxDbType->findText(AppConfig::LocalDbType)); ui->txtDbName->setText(AppConfig::LocalDbName); ui->txtHostName->setText(AppConfig::LocalHostName); ui->txtHostPort->setText(QString::number(AppConfig::LocalHostPort)); ui->txtUserName->setText(AppConfig::LocalUserName); ui->txtUserPwd->setText(AppConfig::LocalUserPwd); } void frmDbClean::getTables() { if (!dbClean->getOk()) { return; } //取出數(shù)據(jù)庫對(duì)應(yīng)的表集合 QStringList tables = dbClean->getDatabase().tables(); ui->cboxTables->clear(); ui->cboxTables->addItems(tables); if (tables.contains("LogInfo")) { ui->cboxTables->setCurrentIndex(ui->cboxTables->findText("LogInfo")); } } void frmDbClean::on_btnDo_clicked() { if (!dbClean->getOk()) { return; } QString tableName = ui->cboxTables->currentText(); QString countName = ui->txtCountName->text(); QString orderSql = ui->txtOrderSql->text(); dbClean->setTableName(tableName); dbClean->setCountName(countName); dbClean->setWhereColumnName(countName); dbClean->setOrderSql(orderSql); //最大保留記錄數(shù)量 dbClean->setMaxCount(AppConfig::Count3 * 10000); //清理間隔 dbClean->setCleanInterval(AppConfig::Interval3); dbClean->cleanData(); }
到此這篇關(guān)于Qt數(shù)據(jù)庫應(yīng)用之實(shí)現(xiàn)通用數(shù)據(jù)庫清理的文章就介紹到這了,更多相關(guān)Qt數(shù)據(jù)庫清理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Qt數(shù)據(jù)庫相關(guān)應(yīng)用開發(fā)總結(jié)
- Qt數(shù)據(jù)庫應(yīng)用之實(shí)現(xiàn)通用數(shù)據(jù)生成器
- Qt數(shù)據(jù)庫應(yīng)用之實(shí)現(xiàn)數(shù)據(jù)圖文混排
- Qt數(shù)據(jù)庫應(yīng)用之實(shí)現(xiàn)數(shù)據(jù)打印到紙張
- Qt數(shù)據(jù)庫應(yīng)用之?dāng)?shù)據(jù)打印到pdf
- Qt數(shù)據(jù)庫應(yīng)用之實(shí)現(xiàn)數(shù)據(jù)的導(dǎo)入與導(dǎo)出
相關(guān)文章
C++11新特性之右值引用與完美轉(zhuǎn)發(fā)詳解
C++11標(biāo)準(zhǔn)為C++引入右值引用語法的同時(shí),還解決了一個(gè)短板,即使用簡(jiǎn)單的方式即可在函數(shù)模板中實(shí)現(xiàn)參數(shù)的完美轉(zhuǎn)發(fā)。本文就來講講二者的應(yīng)用,需要的可以參考一下2022-09-09mac 配置Clion運(yùn)行C和C++的環(huán)境的詳細(xì)步驟
這篇文章主要介紹了mac 配置Clion運(yùn)行C和C++的環(huán)境的步驟詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04C語言數(shù)組學(xué)習(xí)之特殊矩陣的壓縮存儲(chǔ)
矩陣在計(jì)算機(jī)圖形學(xué)、工程計(jì)算中都占有舉足輕重的地位,本文將討論如何將矩陣更有效地存儲(chǔ)在內(nèi)存中,并且能夠方便地提取矩陣中的元素。感興趣的同學(xué)可以了解一下2021-12-12詳解C語言中strcpy()函數(shù)與strncpy()函數(shù)的使用
這篇文章主要介紹了詳解C語言中strcpy()函數(shù)與strncpy()函數(shù)的使用,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-08-08Windows下VScode實(shí)現(xiàn)簡(jiǎn)單回聲服務(wù)的方法
回聲服務(wù)端可以將客戶端傳來的信息,再原封不動(dòng)地發(fā)送給客戶端,因而得名 epoch 服務(wù)。接下來通過本文給大家介紹Windows下VScode實(shí)現(xiàn)簡(jiǎn)單回聲服務(wù)的方法,感興趣的朋友一起看看吧2021-08-08QT使用QComBox和QLineEdit實(shí)現(xiàn)模糊查詢功能
模糊查詢是指根據(jù)用戶輸入的文本,在下拉框的選項(xiàng)中進(jìn)行模糊匹配,并動(dòng)態(tài)地顯示匹配的選項(xiàng),本文將使用QComBox和QLineEdit實(shí)現(xiàn)模糊查詢功能,需要的可以參考下2023-11-11C語言調(diào)試手段:鎖定錯(cuò)誤的實(shí)現(xiàn)方法
本篇文章是對(duì)在C語言調(diào)試中,鎖定錯(cuò)誤的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05OpenCV實(shí)現(xiàn)輪廓的發(fā)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了OpenCV如何實(shí)現(xiàn)輪廓的發(fā)現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05