2012-02-07 25 views

Trả lời

10

Thật không may, LevelDB được thiết kế theo cách đó và nó không cho phép nhiều hơn một cá thể duy nhất của cơ sở dữ liệu được mở. Tất cả các tùy chọn là cho một quá trình, nhưng nếu bạn có nhiều luồng thì bạn có thể lấy một ảnh chụp nhanh và lặp qua nó ở chế độ chỉ đọc (cho phép các luồng khác đọc/ghi vào cơ sở dữ liệu cơ bản cùng một lúc).

Bạn có muốn đạt được hành vi cụ thể không? Nếu vậy, hãy cho chúng tôi biết nó là gì và chúng tôi có thể giúp đỡ.

+0

Cảm ơn câu trả lời của bạn. Tôi có thể có một vài trường hợp của một chương trình tìm kiếm trong cùng một cơ sở dữ liệu. Một giải pháp mà tôi đang nghĩ về tương tự như của bạn, bao bọc một lớp quanh levelDB, sau đó kiểm soát việc truy cập vào levelDB. – ezdazuzena

+1

Đúng, đôi khi không có câu trả lời dễ dàng. Tôi hy vọng nó sẽ có ích! – Kiril

+1

cũng vậy .. bạn nhận được cờ và +1. Chúc mừng – ezdazuzena

3

Nếu bạn chỉ cần truy cập chỉ đọc, mỗi quá trình có thể tạo ra một bản sao của thư mục LevelDB:

cp -r /path/to/dir/with/levelDBdatabase /path/to/dir/with/levelDBdatabase-copy1

Sau đó, thay vì sử dụng bản gốc levelDBdatabase, sử dụng levelDBdatabase-copy1.
Khi chương trình kết thúc, bản sao có thể bị xóa an toàn.

+0

Hoặc nếu bạn sẵn sàng chờ đợi, mỗi quá trình chỉ có thể chờ cho đến khi nó nhận được một khóa ... nhanh chóng làm một bãi chứa ... và sau đó thoát ra. –

+0

Ý tưởng hay nhưng tôi cảm thấy điều này sẽ mất một lúc với cơ sở dữ liệu 30Gb của tôi tại địa phương. – forgetso

5

tôi đã có thể làm điều này trong Linux bằng cách mỗi quá trình tạo ra một thư mục của riêng của nó (ví dụ $ HOME/.leveldb/myprogram_myPID) và sau đó làm:

ln -s -t $HOME/.leveldb/myprogram_myPID /path/to/dir/with/levelDBdatabase/* 
rm $HOME/.leveldb/myprogram_myPID/LOCK 
touch $HOME/.leveldb/myprogram_myPID/LOCK 

Sau đó $ HOME/.leveldb/myprogram_myPID có thể được sử dụng như một cơ sở dữ liệu leveldb chỉ đọc và nhiều phiên bản của quá trình có thể làm điều này cùng một lúc mà không cần sao chép toàn bộ cơ sở dữ liệu.

Có thể là khôn ngoan khi sử dụng ảnh chụp nhanh để truy cập vào db sau khi thực hiện việc này để tránh vô tình viết. Ngoài ra, hãy nhớ xóa thư mục mới khi quá trình kết thúc.

+1

điều này giúp ... nhưng thực sự ... truy cập "chỉ đọc/không được cam kết" như thế này phải được tích hợp sẵn trong thư viện. –

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