2012-02-23 27 views
15

Afaik, SQLite lưu trữ một cơ sở dữ liệu duy nhất trong một tệp duy nhất. Vì điều này sẽ làm giảm hiệu suất khi làm việc với các cơ sở dữ liệu lớn, có thể nói rõ ràng với SQLite không lưu toàn bộ DB trong một tệp và lưu trữ các bảng khác nhau trong các tệp khác nhau không?Nhiều tệp cho một cơ sở dữ liệu SQLite duy nhất

+0

Tại sao bạn cần? chức năng nào không thể đạt được/Hoặc các vấn đề có thể xảy ra bằng cách sử dụng tệp DB duy nhất? –

+2

Tôi đang lên kế hoạch thay thế một Oracle DB bằng SQLite. Hàng nghìn giao dịch sẽ diễn ra suốt cả ngày và tôi e rằng việc đọc và viết một tệp sẽ làm chậm quá trình. Dù sao thì dường như SQLite sẽ không là lựa chọn tốt nhất để xử lý một cơ sở dữ liệu lớn như vậy. – thameera

Trả lời

5

Nếu bạn không cần tham gia giữa các bảng này, bạn có thể chia DB theo cách thủ công và cho biết bảng nào trong đó DB (= tệp).

Tôi không nghĩ rằng có thể để SQLite chia DB của bạn thành nhiều tệp, bởi vì bạn kết nối với một DB bằng cách nói tên tệp.

+0

Không đủ khả năng để có bảng dưới dạng DB khác nhau. Ngoài ra số lượng cơ sở dữ liệu đính kèm tối đa được giới hạn ở 62 trong SQLite. :( – thameera

2

Tệp cơ sở dữ liệu SQLite có thể phát triển khá lớn mà không có bất kỳ hình phạt hiệu suất nào.

Những điều mà có thể làm suy giảm hiệu suất là:

  • tập tin khóa tranh
  • kích thước bảng (nếu sử dụng chỉ số và phát hành các truy vấn ghi)

Ngoài ra, theo mặc định, SQLite giới hạn number of attached databases to 10.

Dù sao, try partition your tables. Bạn sẽ thấy rằng SQLite có thể phát triển rất nhiều theo cách này.

+0

Theo như tôi hiểu từ bài đăng được liên kết, khái niệm phân vùng là tự thực hiện. SQLite không có hỗ trợ phân vùng dựng sẵn như một số RDBMS khác. –

10

Câu hỏi là khoảng ba tuổi nhưng tôi đã đến đây khi tôi tìm kiếm câu hỏi tương tự. Cuối tôi phát hiện ra rằng nó IS có thể:

Sử dụng

sqlite3.exe MainDB.db

ATTACH DATABASE 'SomeTableFile.db' AS stf;

bảng Truy cập từ các tập tin cơ sở dữ liệu khác

SELECT * FROM stf.SomeTable;

Bạn thậm chí có thể tham gia qua nhiều tệp

SELECT * 
FROM MainTable mt 
JOIN stf.SomeTable st 
ON (mt.id = st.mt_id); 

https://www.sqlite.org/lang_attach.html

tameera nói có một giới hạn của 62 cơ sở dữ liệu kèm theo nhưng tôi không bao giờ đạt giới hạn đó vì vậy tôi không thể xác nhận đó.

Lợi thế lớn bên cạnh một số trường hợp đặc biệt là bạn giới hạn phân mảnh trong tệp cơ sở dữ liệu và bạn có thể sử dụng lệnh VACUUM riêng biệt trên mỗi bảng!

+2

Rõ ràng có một giới hạn chuyển đổi để giới hạn số lượng cơ sở dữ liệu có thể được gắn vào một kết nối 'SQLITE_LIMIT_ATTACHED'. Có lẽ tameera đã đạt đến giới hạn đó trong bài kiểm tra? – Sampath

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