2010-04-02 34 views
6

Để ngăn chặn cơ sở dữ liệu trong bộ nhớ SQLite bị xóa, người dùng phải sử dụng cùng một kết nối để truy cập cơ sở dữ liệu. Tuy nhiên, việc sử dụng cùng một kết nối sẽ làm cho SQLite đồng bộ hóa quyền truy cập vào cơ sở dữ liệu. Vì vậy, nếu tôi có nhiều chủ đề thực hiện lần đọc đối với một cơ sở dữ liệu trong bộ nhớ, nó chậm hơn trên một máy đa lõi hơn so với cùng một mã chính xác chạy trên cơ sở dữ liệu được bảo vệ bởi tệp.Quy mô cơ sở dữ liệu SQLite trong bộ nhớ có đồng thời không?

Có cách nào để tận dụng tối đa cả hai thế giới không? Tức là, một cơ sở dữ liệu trong bộ nhớ cho phép nhiều cuộc gọi đồng thời đến cơ sở dữ liệu?

Trả lời

3

Câu trả lời là không. Tôi đã hỏi về nhóm người dùng SQLite và nhận được phản hồi sau từ Pavel Ivanov:

Không, SQLite không hỗ trợ truy cập đồng thời đầy đủ vào bất kỳ cơ sở dữ liệu nào. chỉ đồng thời mà bạn có thể kiếm được là có cơ sở dữ liệu trên đĩa mà không cần bộ nhớ cache dùng chung (do đó thực sự có một số bản sao của cơ sở dữ liệu trong bộ nhớ ). Tất nhiên tôi không xem xét lựa chọn đồng thời từ các quy trình khác nhau.

0

từ đây tôi hiểu câu trả lời là có http://www.sqlite.org/faq.html#q6

+0

Điều đó chỉ có nghĩa là nó an toàn để sử dụng từ nhiều chuỗi. Tôi có thể làm chứng cho việc đó. Nhưng nó không mở rộng - nó chỉ sử dụng một lõi của lõi kép của tôi. Vì vậy, nó an toàn tại các chi phí của hiệu suất. Cập nhật tiêu đề của tôi để làm rõ. –

+0

"nó chỉ sử dụng một lõi duy nhất" - nó có nghĩa là các chủ đề của bạn đã được gửi đi theo cách đó! Điều này có thể do khóa nội bộ hoặc đồng bộ hóa khác trong sqlite. Nếu bạn thực sự muốn đồng thời DB +, bạn nên cân nhắc một số mã tùy chỉnh với lệnh xả cuối cùng cho DB được chia sẻ. tôi nghĩ rằng bạn muốn từ sqlite quá nhiều. – Andrey

+1

vấn đề là nó hoạt động với cơ sở dữ liệu SQLite dựa trên tệp (tiêu thụ CPU 100%), nhưng không phải với cơ sở dữ liệu trong bộ nhớ. Nếu SQLite không hỗ trợ kịch bản này thì đó là tốt nhưng tôi cần một trích dẫn. –

2

Nếu bạn thiết lập kích thước trang và kích thước bộ nhớ cache đủ lớn để chứa toàn bộ cơ sở dữ liệu, đọc các hoạt động sẽ được thực hiện từ bộ nhớ cache và hiệu suất sẽ gần bằng một cơ sở dữ liệu trong bộ nhớ.

+0

+1 Ý tưởng thú vị - Tôi sẽ ghi nhớ điều đó. –

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