2008-11-04 38 views
34

Tôi đang tìm một thư viện giống như dbm mà tôi có thể sử dụng thay cho Berkeley DB, mà tôi hiện đang sử dụng. Lý do chính của tôi để chuyển đổi là phí cấp phép cho BDB là khá cao (miễn phí cho các ứng dụng mã nguồn mở, nhưng chủ nhân của tôi không muốn mở nguồn ứng dụng cụ thể này vì nhiều lý do).Thay thế cho BerkeleyDB?

Tôi đã xem xét ngắn gọn qdbm nhưng có vẻ như nó sẽ không đáp ứng được nhu cầu của tôi - nhiều khóa (vài triệu) và các mục dữ liệu lớn (> 1-5 megabyte). Trước khi tôi tiếp tục tìm kiếm, tôi đã hình dung rằng tôi muốn hỏi vì có vẻ như có rất nhiều thư viện giống như dbm.

Trả lời

10

SQLite là miền công cộng, có nghĩa là bạn có thể sử dụng nó cho mọi mục đích và được sử dụng rộng rãi và được hỗ trợ.

+1

Ý tưởng tốt, nhưng SQLite rõ ràng là không được khuyến khích cho lớn cơ sở dữ liệu. Chúng ta sẽ có khoảng 50GB; xin lỗi, điều đó có thể không rõ ràng trong bài đăng gốc. –

+1

Vấn đề khác là BDB không phải là một DBMS SQL, nó là một công cụ lưu trữ. Vì vậy, trừ khi ông đã viết một triển khai SQL trên đầu trang của BDB, có vẻ như sẽ có nhiều công việc hơn một chút để chuyển sang SQL chứ không phải là một công cụ lưu trữ khác. – Ferruccio

+0

@ Ferruccio, anh ta không phải chuyển sang SQL, anh ta có thể chỉ cần triển khai API giống như BDB trên đầu trang của SQL. dễ dàng. –

0

db4o là khá rẻ và nhanh chóng nhưng nó chỉ có thể được sử dụng với java hoặc .net

+0

db4o trông đẹp nhưng tiếc là đây là một ứng dụng C++ ... –

+1

db4o là thay thế hoàn toàn không phù hợp với BerkeleyDB. db4o bổ sung không cung cấp mô hình cấp phép miễn phí bản quyền. Họ đang tính phí cho mỗi lần triển khai. –

+0

khá rẻ như trong $ 1200 – KJW

0

Firebird là bạn thân nhất của mình.

+0

Firebird là một cơ sở dữ liệu ** SQL ** rất đẹp.Không tuyệt vời như một DB lưu trữ, nhưng có lẽ tốt hơn so với hầu hết do hỗ trợ BLOB rất tốt. –

+1

Bạn có thể xây dựng thêm một chút về 'không tuyệt vời như một DB lưu trữ' không? Ngoài ra, tôi muốn nghe thêm về những gì Firebird là không tuyệt vời (giá? Kích thước? :)) –

18

Bạn có thể xem Tokyo Cabinet. Kế thừa của nó là qdbm/gdbm, và nếu bạn quyết định mở rộng có một giao diện mạng tốt đẹp có sẵn.

Edit:

biến thể khác là Kyoto Cabinet; được phát triển bởi cùng một người, nhưng được cho là dễ sử dụng hơn.

8

Bạn có thể nhận được nhiều cải thiện hiệu suất ra của bất kỳ dbm (thậm chí qdbm) và được cải thiện song song với một mức độ đơn giản về mình: Đơn giản chỉ cần lấy chìa khóa của bạn và băm họ, và sử dụng data_dir/H(key)/ làm cơ sở dữ liệu để lưu trữ các khóa đó. Giới hạn đầu ra băm thành một giá trị nhỏ (nói) 255 để có kết quả tốt nhất.

Cách tiếp cận này có một số lợi ích, dễ dàng tóm tắt:

  • Về mặt lý thuyết đơn giản
  • dễ dàng để thực hiện và kiểm tra
  • Không khóa toàn bộ cơ sở dữ liệu để cập nhật
  • thể hỗ trợ lớn hơn nhiều cơ sở dữ liệu
  • Dễ dàng thay thế thành phần DBM

Băm có lẽ thậm chí không cần phải bảo mật về mặt mã hóa; chủ yếu là đồng phục. Số cdb hash của DJB hoạt động tốt trong hầu hết các trường hợp.

+0

gợi ý thú vị, nhưng đó là một chút trực giao cho câu hỏi. Thành tích của việc sử dụng bảng băm so với cấu trúc giống như btree được sắp xếp là một chủ đề khác. – gonzojive

3

Bạn có thể thử JDBM. Nó là một kho lưu trữ khóa giá trị miễn phí (Apache 2) với sự tồn tại của đĩa. API đơn giản và hiệu suất cao

20

C/C++

Java