2012-01-26 14 views
12

Quali sono le connessioni massime per il database sqlite3?Quali sono le connessioni massime per il database sqlite3

Qualsiasi motivo Non posso utilizzarlo per siti Web di grandi dimensioni Supponiamo 3 milioni di utenti?

+7

sqlite non consente l'accesso simultaneo in scrittura (vale a dire solo una transazione di scrittura può essere in corso alla volta), motivo per cui non dovrebbe essere utilizzato per i siti Web con carichi di lavoro pesanti. –

+2

@DanD. questa dovrebbe essere la risposta – TMS

risposta

15

http://sqlite.org/whentouse.html spiega "Situazioni in cui un altro RDBMS può funzionare meglio":

SQLite utilizza serrature lettore/scrittore sull'intero file di database. Ciò significa che se un processo sta leggendo da qualsiasi parte del database, a tutti gli altri processi viene impedito di scrivere qualsiasi altra parte del database. Allo stesso modo, se uno qualsiasi dei processi sta scrivendo nel database, a tutti gli altri processi viene impedito di leggere qualsiasi altra parte del database. Per molte situazioni, questo non è un problema. Ogni applicazione fa funzionare rapidamente il suo database e si muove, e nessun blocco dura per più di qualche decina di millisecondi. Ma ci sono alcune applicazioni che richiedono più concorrenza e quelle applicazioni potrebbero dover cercare una soluzione diversa.

4

Sotto sistema diverso, questo valore può essere diverso, il codice di prova 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) 

sotto Ubuntu, il conteggio fallito è 1021, è possibile verificare che sotto OS diverso.

+0

quali sono stati i risultati del test. 1021 connessioni a più database o a un singolo database? –

2

In realtà non esiste un limite predefinito per il numero di connessioni simultanee in sqlite per lo stesso processo. Questo dipende dalle prestazioni del tuo sistema. La citazione fornita dall'utente647772 riguarda il limite di processi o applicazioni concorrenti che utilizzano lo stesso DB sqlite, non valido per i thread simultanei nello stesso processo.

Problemi correlati