sqlite3数据库的最大连接数是多少

Mic*_*ris 23 database sqlite

sqlite3数据库的最大连接数是多少?

为什么我不能将它用于非常大的网站假设有300万用户?

小智 29

http://sqlite.org/whentouse.html解释了"另一个RDBMS可以更好地工作的情况":

SQLite在整个数据库文件中使用读/写锁.这意味着如果任何进程正在从数据库的任何部分读取,则阻止所有其他进程编写数据库的任何其他部分.同样,如果任何一个进程正在写入数据库,则阻止所有其他进程读取数据库的任何其他部分.在许多情况下,这不是问题.每个应用程序都可以快速完成数据库工作并继续运行,并且锁定持续时间超过几十毫秒.但是有些应用程序需要更多的并发性,而这些应用程序可能需要寻求不同的解决方案.

  • 这个答案已经过时了! (3认同)
  • @Cosinus:你能详细说明一下吗? (3认同)

小智 6

对于同一进程,sqlite 中的并发连接数实际上没有预定义的限制。这取决于您的系统性能。user647772给出的引用是关于使用相同sqlite DB的并发进程或应用程序的限制,对同一进程中的并发线程无效。


coa*_*nor 5

在不同的系统下,这个值可能会有所不同,python测试代码:

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)
Run Code Online (Sandbox Code Playgroud)

在ubuntu下,失败的计数是1021,你可以在不同的操作系统下测试它.

  • 这不是sqlite3限制.你在这里遇到的是你可以在一个linux进程中一次打开的文件句柄数量的默认限制.默认限制为1,024.你看到的是1,021个句柄,用于打开数据库,一个文件句柄用于stdin,stdout和stderr.但这只是一个默认值,可以很容易地改变. (15认同)