2012-01-26 1382 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数据库的并发进程或应用程序的限制,对同一进程中的并发线程无效。