sqlite支持多少并發(fā) sqlite能不能多線程并發(fā)訪問?
sqlite能不能多線程并發(fā)訪問?作為一個(gè)小型嵌入式數(shù)據(jù)庫,SQLite不提供復(fù)雜的鎖定機(jī)制。它不能在內(nèi)部管理多通道并發(fā)下數(shù)據(jù)操作的同步,更不能進(jìn)行優(yōu)化。因此,當(dāng)涉及到多通道并發(fā)時(shí),需要外部讀寫鎖控制
sqlite能不能多線程并發(fā)訪問?
作為一個(gè)小型嵌入式數(shù)據(jù)庫,SQLite不提供復(fù)雜的鎖定機(jī)制。它不能在內(nèi)部管理多通道并發(fā)下數(shù)據(jù)操作的同步,更不能進(jìn)行優(yōu)化。因此,當(dāng)涉及到多通道并發(fā)時(shí),需要外部讀寫鎖控制,否則SQLite會(huì)返回SQLiteBusy錯(cuò)誤來拒絕請(qǐng)求。
返回SQLiteuuBusy主要有以下幾種情況:
1。當(dāng)有寫操作時(shí),其他的讀操作將被拒絕
2。當(dāng)有寫操作時(shí),其他寫操作將被拒絕
3。其他事務(wù)啟動(dòng)時(shí),在提交之前會(huì)被拒絕。當(dāng)一個(gè)事務(wù)被打開時(shí),在提交該事務(wù)之前,其他事務(wù)請(qǐng)求將被拒絕
5。當(dāng)有讀操作時(shí),其他寫操作將被拒絕
6?;谝陨嫌懻?,我們可以看出這是一個(gè)典型的讀者-作者問題。讀操作應(yīng)該是共享的,寫操作應(yīng)該是互斥的,讀操作和寫操作也應(yīng)該是互斥的
可以設(shè)計(jì)以下解決方案來解決并發(fā)操作數(shù)據(jù)庫的鎖定問題,并保證讀操作可以保持最大的并發(fā)性
1?;コ庥糜诳刂茢?shù)據(jù)庫寫入操作。只有具有互斥的線程才能操作數(shù)據(jù)庫
3。寫操作必須與互斥無關(guān)
4。讀取操作必須能夠共享互斥鎖,即在第一次讀取時(shí)獲取互斥鎖,在最后一次讀取時(shí)釋放互斥鎖http://blog.csdn.net/bestrem9/article/details/6322916
SQLite是一個(gè)輕量級(jí)數(shù)據(jù)庫,它更適合低并發(fā)性和小數(shù)據(jù)量的應(yīng)用場(chǎng)景。有些人推薦access,但我不推薦,因?yàn)閍ccess在事物和并發(fā)處理方面有問題。其他的像MySQL或者sqlserver都太重了。我推薦H2。數(shù)據(jù)庫引擎,包括管理工具,總共只有10兆字節(jié)。它既可以作為嵌入式數(shù)據(jù)庫與程序一起發(fā)布,也可以作為數(shù)據(jù)量小、并發(fā)性好的網(wǎng)站數(shù)據(jù)庫的數(shù)據(jù)庫服務(wù)器。H2具有優(yōu)異的性能。我曾經(jīng)測(cè)試過記錄的插入。該表有大約10個(gè)字段,只有一個(gè)自增主鍵,其他列沒有索引。60萬條記錄的插入時(shí)間為13秒,1秒約為5萬條記錄。H2支持標(biāo)準(zhǔn)SQL,兼容多個(gè)大型數(shù)據(jù)庫的SQL語法,支持內(nèi)存模式打開數(shù)據(jù)庫,支持在線備份。缺點(diǎn)是字符集的支持不好,中文排序需要特殊處理。
推薦個(gè)數(shù)據(jù)庫類似sqlite?
對(duì)于程序員來說,常用的關(guān)系型數(shù)據(jù)庫有mysql、Oracle、DB2,使用sqllite的數(shù)據(jù)庫還是比較少的,但是我現(xiàn)在用的項(xiàng)目是SQLite數(shù)據(jù)庫,SQLite是一個(gè)輕量級(jí)的關(guān)系型數(shù)據(jù)庫,常用于嵌入式系統(tǒng),占用的資源比較少,支持主流操作系統(tǒng)Linux、windows,同時(shí)可以與主流編程語言Java、PHP等進(jìn)行通信。
然而,SQLite仍然有許多缺點(diǎn)。在相對(duì)復(fù)雜的查詢中沒有優(yōu)化器,其鎖的粒度也相對(duì)粗糙。如果寫入并發(fā)性很高,則必須選擇其他數(shù)據(jù)庫。當(dāng)然,由于SQLite的簡(jiǎn)單性,它不支持高寫并發(fā)性。SQLite還有其他尚未實(shí)現(xiàn)的特性,如完整的修改表結(jié)構(gòu)支持、完整的觸發(fā)器支持、右外連接和所有外連接、可更新視圖等
SQLite許多未實(shí)現(xiàn)的特性和缺點(diǎn)不是不能實(shí)現(xiàn),而是如果可以實(shí)現(xiàn),它將失去簡(jiǎn)潔的特點(diǎn)。SQLite和其他數(shù)據(jù)庫有什么區(qū)別?每個(gè)數(shù)據(jù)庫都是在特定的情況下使用的,會(huì)有優(yōu)缺點(diǎn),優(yōu)缺點(diǎn)總是一樣的。
SQLite的讀寫效率很高,有哪些使用其他數(shù)據(jù)庫的理由?
SQLite是一個(gè)嵌入式數(shù)據(jù)庫。但有一個(gè)致命的缺點(diǎn):容易陷入僵局。