2012-01-26 126 views
12

sqlite3數據庫的最大連接數是多少?sqlite3數據庫的最大連接數

任何爲什麼我不能將它用於非常大的網站假設有300萬用戶?

+7

sqlite不允許併發寫入訪問(即一次只能執行一個寫入事務),這就是爲什麼它不應該用於寫入繁重工作負載的網站。 –

+2

@DanD。這應該是回答 – TMS

回答

15

http://sqlite.org/whentouse.html解釋說,「情況下的另一個RDBMS更好地工作」:

的SQLite使用讀/寫鎖對整個數據庫文件。這意味着如果有任何進程正在從數據庫的任何部分讀取數據,則所有其他進程都無法寫入數據庫的任何其他部分。同樣,如果任何一個進程正在寫入數據庫,則所有其他進程都無法讀取數據庫的任何其他部分。對於很多情況,這不是問題。每個應用程序都快速完成其數據庫工作並繼續前進,並且不會有超過幾十毫秒的鎖定。但是有一些應用程序需要更多的併發性,而這些應用程序可能需要尋求不同的解決方案。

4

在不同的系統中,這個值可能會有所不同,蟒蛇測試代碼:

import sqlite3 
import sys 

# connect to multiple databases 
def multi_connect(conn_num): 
    dbs = [] 
    for i in range(0, conn_num): 
     try: 
      con = sqlite3.connect(str(i) + '.db') 
     except Exception as e: 
      print('connect to %d.db failed' % i) 
      sys.exit(-1) 


# multiple connections to single database 
def multi_connect2(conn_num): 
    db_name = 'x.db' 
    conns = [] 
    for i in range(0, conn_num): 
     try: 
      conn = sqlite3.connect(db_name) 
     except Exception as e: 
      print('connect failed at %d' % i) 
      sys.exit(-1) 

ubuntu下,失敗的次數是1021,你可以在不同的操作系統下進行測試。

+0

你的測試結果是什麼。 1021連接到多個數據庫或單個數據庫? –

2

對於同一個進程,sqlite中的併發連接數實際上沒有預定義的限制。這取決於您的系統性能。 user647772給出的引用是關於使用相同sqlite數據庫的併發進程或應用程序的限制,對同一進程中的併發線程無效。