2011-11-16 25 views
10

Tôi cần một cơ sở dữ liệu SQLite rất nhanh. Đặt thông số theo cách này:Làm thế nào tôi có thể đồng bộ hóa với cơ sở dữ liệu SQLite đĩa với PRAGMA đồng bộ = OFF

PRAGMA synchronize = OFF 
PRAGMA jorunal_mode = MEMORY 

làm cho tốc độ đủ cho dự án của tôi. Các cài đặt này làm cho SQLite để đồng bộ hóa với tệp cơ sở dữ liệu trong tay của hệ điều hành. Nhưng có một vài trường hợp, một số chèn nhất định, sau đó tôi phải là chắc chắn rằng dữ liệu đã được ghi vào đĩa.

Có cách nào tôi có thể buộc SQLite ghi tất cả dữ liệu (chờ trong nhật ký bộ nhớ) vào đĩa không?

Cảm ơn.

Trả lời

7

Tôi khuyên bạn nên sử dụng gần đây được triển khai WALjournal_mode. Bằng cách này, bạn có thể để synchronous-normal và có tất cả viết của bạn ghi vào đĩa như bạn đi:

Viết giao dịch rất nhanh vì chúng chỉ liên quan đến văn bản cho nội dung một lần (so với hai lần cho giao dịch rollback-tạp chí) và vì ghi là tất cả tuần tự. Hơn nữa, việc đồng bộ nội dung với không cần đĩa, miễn là ứng dụng sẵn sàng độ bền hy sinh sau khi mất điện hoặc khởi động lại cứng. (. Nhà văn đồng bộ các WAL trên mỗi giao dịch cam kết nếu PRAGMA đồng bộ được thiết lập để ĐẦY ĐỦ nhưng bỏ qua đồng bộ hóa này nếu PRAGMA đồng bộ được thiết lập để NORMAL)

Trên đây được lấy từ:

http://www.sqlite.org/wal.html

Nếu điều đó là không đủ, bạn vẫn có thể gọi PRAGMA database.wal_checkpoint; khi bạn muốn chắc chắn rằng ghi của bạn không chỉ được ghi vào đĩa, mà còn "tích hợp" với DB của bạn. Kiểm tra thông tin sau đây để biết thêm thông tin:

http://www.sqlite.org/pragma.html#pragma_wal_checkpoint

+0

Đây chính là cách tôi đã thực hiện việc này. – kappa

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