今天比較閒看到大家在群裡討論關於資料庫操作的問題,其中談到了「事務」這個詞,坦白講雖然作為計算機專業的學生,在上學的時候確實知道儲存過程、觸發器、事務等等這些名詞的概念,但是由於畢業後從事的不是伺服器方面的工作,對資料庫方面的知識一直停留在理論階段,在ios中有兩種比較常用的資料庫,一種是sqlite,另外一種是coredata,這二者的優缺點在這裡不再贅述,如有感興趣的同學可以查閱相關資料
令人興奮的是,當談到「事務」時,我想到了sqlite本身是支援事務操作的,fmdb作為sqlite的上層封裝也對事務進行了支援,那麼說了這麼多給不了解「事務」這個詞的同學解釋一下吧:通常一次 sqlite3_exec 就是一次事務,假如你要對資料庫中的stutent表插入新資料,那麼該事務的具體過程是:開始新事物->插入資料->提交事務,那麼當我們要往該錶內插入500條資料,如果按常規操作處理就要執行500次「開始新事物->插入資料->提交事務」的過程。
好吧,今天的重點來了,舉個例子:假如北京的一家a工廠接了上海一家b公司的500件產品的訂單,思考一下:a工廠是生產完一件立即就送到b公司還是將500件產品全部生產完成後再送往b公司?答案肯定是後者,因為前者浪費了大量的時間、人力物力花費在往返於北京和上海之間。同樣這個道理也能用在我們的資料庫操作上,下面是我自己對使用事務和不使用事務的兩種測試:
測試**:
下面**中總共呼叫了三次插入資料的方法,由於第一次呼叫過程中包含資料庫和表的建立等一系列過程,因此第二三次呼叫插入方法計算出的時間才是準確的。(資料庫採用fmdb)
- (void下面是具體的插入實現方法,)viewdidload
usetransaction為真代表使用事務處理,反之不使用
- (void)insertdata:(int最後將兩種方式的耗時進行對比(此結果在模擬器中執行))fromindex usetransaction:(bool)usetransaction}}
@catch (n***ception *exception)
@finally}}
else}}
[_database close];
}
從上面這些真實的資料來看,你就應該知道當你批量更新資料庫的時候應該利用事務處理!
總結:使用事務處理就是將所有任務執行完成以後將結果一次性提交到資料庫,如果此過程出現異常則會執行回滾操作,這樣節省了大量的重複提交環節所浪費的時間
**:
使用FMDB事務批量更新資料庫
在ios中有兩種比較常用的資料庫,一種是sqlite,另外一種是coredata 這二者的優缺點在這裡不再贅述,如有感興趣的同學可以查閱相關資料 令人興奮的是,當談到 事務 時,我想到了sqlite本身是支援事務操作的,fmdb作為sqlite的上層封裝也對事務進行了支援,那麼說了這麼多給不了解 事...
使用FMDB事務批量更新資料庫
我們公司現在這個專案每次發新版本,都要求插入最新的本地資料。所以我要在使用者更新完程式第一次啟動時,在使用者的舊資料庫表裡插入或替換好幾千條資料。這樣就會在啟動頁變得比較慢。我記得以前學過事務這麼個東西可以讓這一過程變快,但具體用法已經忘了,便開始在網上找尋事務的用法。下面是我複製的文章資訊 今天比...
使用FMDB事務批量更新資料庫速度問題
今天比較閒看到大家在群裡討論關於資料庫操作的問題,其中談到了 事務 這個詞,坦白講雖然作為計算機專業的學生,在上學的時候確實知道儲存過程 觸發器 事務等等這些名詞的概念,但是由於畢業後從事的不是伺服器方面的工作,對資料庫方面的知識一直停留在理論階段,在ios中有兩種比較常用的資料庫,一種是sqlit...