2010-04-04 62 views
15

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?

+0

@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

+2

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

+0

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 ?? –

Trả lời

4

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.

+1

lưu trữ khóa-giá trị trong bộ nhớ – Roman

+0

@cletus: không hashmap sử dụng lưu trữ khóa-giá trị trong bộ nhớ không? – Ashwin

3
+0

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

+0

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. –

0

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.

1

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 ...

1

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/.

6

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.

1

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ờ.

1

MapDb là giải pháp thay thế cho Berkley với giấy phép Apache 2 thân thiện.

  • Cung cấp cửa hàng trọng điểm có giá trị qua java của giao diện đồ
  • nhẹ (300KB jar)
  • nhanh và threadsafe
  • vẫn còn thay đổi vào đĩa nếu bạn muốn
  • Nhiều khác features
+0

Nhẹ? mvn copy-dependencies thu thập khoảng 14 MB cho mapdb: 3.0.5 – weberjn

0

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(); 
2

Chronicle-Map là một thay thế mạnh mẽ.

  • tinh khiết Java, chỉ cần java.util.Map thực hiện
  • Cửa hàng dữ liệu off-heap, tùy chọn vẫn kiên trì vào đĩa thông qua các file bộ nhớ ánh xạ
  • mã nguồn mở, cho phép Apache 2.0 Giấy phép
  • Vô cùng nhanh chóng, có thể quản lý hàng triệu các bản cập nhật/truy vấn mỗi giây (see exact numbers)
Các vấn đề liên quan