Berkeley DB sẽ là lựa chọn tốt nhất có thể nhưng tôi không thể sử dụng nó do các vấn đề cấp phép.Tìm kiếm kho lưu trữ khóa-giá trị tương thích với bộ nhớ trong java
Có lựa chọn thay thế nào không?
Berkeley DB sẽ là lựa chọn tốt nhất có thể nhưng tôi không thể sử dụng nó do các vấn đề cấp phép.Tìm kiếm kho lưu trữ khóa-giá trị tương thích với bộ nhớ trong java
Có lựa chọn thay thế nào không?
Câu hỏi của bạn có thể là một trong hai điều.
Nếu bạn có nghĩa là cấu trúc dữ liệu để lưu trữ cặp khóa-giá trị, hãy sử dụng một trong các trường hợp Map
là một phần tiêu chuẩn của JDK.
Nếu tuy nhiên bạn đang ở sau cửa hàng khóa-giá trị trong bộ nhớ thì tôi khuyên bạn nên xem EHCache hoặc thậm chí memcached.
Nó thiếu quản lý giao dịch và khả năng giữ một số dữ liệu trong đĩa và một phần khác trong bộ nhớ và vv .. // mỉa mai – Roman
Ah, tôi hiểu :) Đã xảy ra sự cố khi người nào đó muốn phát triển nội dung cho Android nhưng cần sử dụng hashmap được lưu trữ do kích thước dữ liệu của anh quá lớn. Một cái gì đó tương tự, tôi đoán. –
Có dbs lightweigh hoặc nhúng như HSQLDB, Derby, SQLite Nhưng giống như những người khác không hiểu lý do tại sao bạn cần một db để lưu trữ khóa/giá trị ...
Tại sao không phải là một đồ? Cần giữ khóa/giá trị khi khởi động lại ứng dụng?
Cũng có thể không phải là những gì bạn cần nhưng với html5 trên trình duyệt cập nhật, bạn có localStorage cho phép bạn lưu trữ khóa/giá trị trong trình duyệt bằng javascript.
jdbm hoạt động tốt cho loại điều này. Nó được dự định để lưu trữ trên đĩa trong một tệp được phân trang, cung cấp hỗ trợ giao dịch cơ bản (không có sự đảm bảo về sự cô lập, nhưng ACD được bảo hiểm). Chúng tôi đã sử dụng nó trong một hệ thống sản xuất với triển khai khá rộng và đã khá hài lòng với hiệu suất, tính ổn định, v.v ...
Cân nhắc sử dụng jredis. Đó là một máy khách Java cho Redis, một kho lưu trữ khóa-giá trị liên tục. Ngoài ra còn có một trình điều khiển JDBC cho nó: code.google.com/p/jdbc-redis/.
Bạn có thể thử Hazelcast. Chỉ cần thêm hazelcast.jar vào classpath của bạn. Và bắt đầu mã hóa
java.util.Map map = Hazelcast.getMap("myMap");
Bạn sẽ nhận được một bộ nhớ trong, phân phối, dữ liệu động có thể mở rộng siêu nhanh.
Tôi biết đây là bài đăng cũ hai năm nhưng tôi đã rối tung xung quanh với Infinispan gần đây và tôi thích nó cho đến thời điểm này. Tôi không phải là một chuyên gia bởi bất kỳ phương tiện nhưng nó không phải là quá khó khăn cho tôi để thiết lập một bộ nhớ cache phân phối với một vài nút và tôi đã kéo một số dữ liệu từ họ trong khoảng một giờ.
MapDb là giải pháp thay thế cho Berkley với giấy phép Apache 2 thân thiện.
Nhẹ? mvn copy-dependencies thu thập khoảng 14 MB cho mapdb: 3.0.5 – weberjn
Tôi khuyên bạn nên thử sử dụng Redisson.Bạn sẽ có thể sử dụng các phân bổ Map
hoặc ConcurrentMap
và khác (Thiết lập, Danh sách, Hàng đợi, Khóa ...) được phân phối và có thể mở rộng trên máy chủ khóa giá trị hiệu suất cao Redis.
Dễ dụ:
Redisson redisson = Redisson.create();
ConcurrentMap<String, SomeObject> map = redisson.getMap("anyMap");
...
redisson.shutdown();
Chronicle-Map là một thay thế mạnh mẽ.
java.util.Map
thực hiện
@Bước C: bạn được hoan nghênh chỉnh sửa và đưa ra giải thích tốt hơn. Về "đáp ứng mỉa mai": nó có vẻ kỳ lạ đối với tôi rằng thay thế cho Berkeley DB là HashMap. – Roman
upvoting - câu hỏi có vẻ hợp pháp, và không phải là nhiều mỉa mai đi xung quanh. Cho, câu hỏi có thể đã nêu từ đầu rằng hashmaps sẽ không cắt nó. – tucuxi
OK @Roman ... những gì ** DO ** bạn có nghĩa là "// sarcasam" trong bình luận của bạn dưới đây ?? –