2010-04-08 29 views
0

我目前使用單例來訪問我的數據庫(請參閱related question),但現在嘗試添加一些背景處理時,一切都會崩潰。我閱讀sqlite文檔,發現sqlite可以工作線程安全,但每個線程必須有自己的數據庫連接。我嘗試使用egodatabase,承諾一個線程安全的sqlite包裝,但是很麻煩,所以我回到我的舊FMDB庫,我開始看到如何以多線程方式使用它。將連接幫助線程在sqlite中(以及如何)彙集?

因爲我的所有代碼都帶有單例的想法,所以改變一切將會很昂貴(並且很多開放/關閉連接會變得很慢),所以我想知道是否像sqlite文檔提示一樣爲每個連接將有所幫助。如果是這樣的話,怎麼樣呢?如何知道從池中獲取哪個連接(因爲2個線程無法共享連接)?用的NSOperation或類似的東西

我不知道是否有人已經在使用SQLite多線程,我唯一的搜索返回「是的,它可能」,但讓細節我的想象......

回答

0

你應該看看使用線程局部變量來保存連接;如果變量爲空(即,持有像NULL之類的東西),則您知道可以安全地在該位置打開一個連接來爲線程提供服務並將連接存儲回變量。不知道如何與Obj-C做到這一點。

另外請注意,SQLite是而不是調整爲併發寫入。編寫器鎖是昂貴的,因此在寫入事務(即包含INSERT,UPDATE或DELETE的事務)中的任何時間都要保持在所有線程中的最小值。交易提交也很昂貴。