2012-01-26 45 views
12

Kết nối tối đa cho cơ sở dữ liệu sqlite3 là gì?Kết nối tối đa cho cơ sở dữ liệu sqlite3

Tại sao tôi không thể sử dụng nó cho các trang web rất lớn Giả sử 3 triệu người dùng?

+7

sqlite không cho phép truy cập ghi đồng thời (nghĩa là chỉ có một giao dịch ghi có thể được thực hiện tại một thời điểm), đó là lý do tại sao nó không được sử dụng cho các trang web có ghi khối lượng công việc nặng. –

+2

@DanD. điều này sẽ được trả lời – TMS

Trả lời

15

http://sqlite.org/whentouse.html giải thích "tình huống mà Một RDBMS có thể làm việc tốt hơn":

SQLite sử dụng ổ khóa đọc/ghi trên toàn bộ tập tin cơ sở dữ liệu. Điều đó có nghĩa là nếu bất kỳ quá trình nào đang đọc từ bất kỳ phần nào của cơ sở dữ liệu, tất cả các quy trình khác đều bị ngăn không cho viết bất kỳ phần nào khác của cơ sở dữ liệu. Tương tự như vậy, nếu bất kỳ một tiến trình nào được ghi vào cơ sở dữ liệu, tất cả các quy trình khác đều được ngăn chặn đọc bất kỳ phần nào khác của cơ sở dữ liệu. Đối với nhiều tình huống, đây không phải là một vấn đề. Mỗi ứng dụng làm cơ sở dữ liệu của nó hoạt động nhanh chóng và di chuyển trên, và không có khóa kéo dài hơn một vài chục mili giây. Nhưng có một số ứng dụng yêu cầu đồng thời nhiều hơn và các ứng dụng đó có thể cần tìm một giải pháp khác.

4

Dưới hệ thống khác nhau, giá trị này có thể khác nhau, các mã kiểm tra 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) 

Dưới ubuntu, số thất bại là 1021, bạn có thể kiểm tra nó dưới hệ điều hành khác nhau.

+0

kết quả thử nghiệm của bạn là gì. 1021 kết nối với nhiều cơ sở dữ liệu hoặc một cơ sở dữ liệu? –

2

Thực sự không có giới hạn được xác định trước cho số lượng kết nối đồng thời trong sqlite cho cùng một quá trình. Điều này là tối đa hiệu suất của hệ thống của bạn. Các báo giá được đưa ra bởi user647772 là về giới hạn của quá trình đồng thời hoặc các ứng dụng bằng cách sử dụng cùng một sqlite DB, không hợp lệ cho các chủ đề đồng thời trong cùng một quá trình.

Các vấn đề liên quan