在hign併發環境中SQLite阻塞表丟失數據。我正在尋找提高SQLite的高性能並且不會丟失插入查詢數據的方法。我的意圖是知道用於插入的併發用戶數限制,即網站在「高併發性」的情況下工作(在本例中爲1插入請求)。爲了使這個測試案例更簡單,用戶會發送數據到數據庫Sqlite3插入性能測試
節省尋找如何提高性能和使用建議其他用戶後:
- sqlite.org
- sqlite.org/的faq.html#Q19
- stackoverflow.com/questions/1711631/how-do-i-improve-the-performance-of-sqlite
- stackoverflow.com/questions/54998/how-scalable-is-sqlite
我決定在一個亞馬遜小實例中做一個小測試。
平臺
- Linux版本的2.6.35.14-106.53.amzn1.i686([email protected])(gcc版本4.4.5 20110214(紅帽4.4.5-6)( GCC))#1 SMP週五1月6日十六時20分23秒UTC 2012
- SQLite的3.6.20
- Lighttpd的1.4.29
- 腓5.3.10
test.php with insert sql:
PRAGMA synchronous = OFF; BEGIN TRANSACTION; INSERT INTO
test
(data1
,date
)VALUES('「。$ _ POST ['data1']。」',date()); END TRANSACTION;
使用Apache HTTP服務器基準測試工具。
數據庫是文件系統中不在RAM中的文件。
結論: 測試1:AB -n 10000 -c 50 -k xxxx.xxx/test.php?data1=fc82bf71a0d5f8a3c2dc868ebe0d6eaa
- 時間採取測試:63.637秒
- 完成請求:10000
- 失敗請求:0
- Sqlite插入行:10050
- Average:159.52 insert/sg
Test2:ab -n 10000 -c 100 -k xxxx.xxx/test.php?DATA1 = fc82bf71a0d5f8a3c2dc868ebe0d6eaa
- 時間採取的測試:64.221秒
- 完成請求:10000名
- 失敗的請求:0
- SQLite的插入的行:10100
- 平均:157.26插入/ SG
Test3:ab -n 10000 -c 150 -k xxxx.xxx/test.php?data1=fc82bf71a0d 5f8a3c2dc868ebe0d6eaa
- 時間採取測試:33.338秒
- 完整的請求:10000名
- 失敗的請求:7095
- (連接:0,接收:0,長度:7095,例外:0)
- SQLITE:2905插入行
- 平均值:丟失數據!
TEST4:AB -n採取測試10000〜C 200的-k xxxx.xxx/test.php?data1=fc82bf71a0d5f8a3c2dc868ebe0d6eaa
- 時間:33.705秒
- 完成請求:萬名
- 失敗的請求:7049
- (連接:0,接收:0,長度:7049,例外:0)
- SQLITE:2918插入行
- 平均:丟失數據!
在這個特定的環境中,我們可以使用SQLite最多100個併發用戶,平均值爲157.26 insert/sg。考慮到這個結果只適用於插入數據。
從我的無知,有可能防止丟失數據?是否有可能改善這種表現?
我喜歡SQLite的,但你真的不打自己的優勢......爲什麼不記錄到文件中,然後定期導入that've對於SQLite – Eli 2012-04-15 05:42:10
我們正在使用sqlite3的生產與基於Web的約20個用戶Rails應用程序(並非全部都在同一時間在線)。到目前爲止,我們還沒有聽到投訴。現在我們正在開發一個擁有大約60個用戶的Web應用程序,我們想知道是否需要使用其他數據庫,如postgres或mysql。您發佈幫助以瞭解sqlite3的限制和100個併發用戶對我們的應用程序看起來不錯。你是否嘗試從多臺電腦或更大的數據集插入啓動插入? Sqlite3使用非常簡單,我們喜歡它。 – user938363 2012-10-16 15:35:44
c = 100和150之間是否有c測試沒有丟失數據? – user938363 2012-10-16 17:48:23