2008-11-04 13 views
34

Szukam biblioteki podobnej do dbm, której mogę użyć zamiast Berkeley DB, z której aktualnie korzystam. Mój główny powód przełączania to opłaty licencyjne dla BDB są dość wysokie (darmowe dla aplikacji open source, ale mój pracodawca nie chce otworzyć źródła tej konkretnej aplikacji z różnych powodów).Alternatywa dla BerkeleyDB?

Spojrzałem krótko na qdbm, ale wygląda na to, że nie spełni moich potrzeb - wiele kluczy (kilka milionów) i duże elementy danych (> 1-5 megabajtów). Zanim przejdę dalej, pomyślałem, że zapytam, ponieważ wydaje się, że jest tam mnóstwo bibliotek typu dbm-like.

Odpowiedz

10

SQLite jest domeną publiczną, co oznacza, że ​​można z niego korzystać w dowolnym celu i jest powszechnie stosowana i obsługiwana.

+1

Dobry pomysł, ale SQLite najwyraźniej nie jest zalecany dla dużych bazy danych. Nasze będzie około 50 GB; przepraszam, prawdopodobnie nie było to jasne w oryginalnym poście. –

+1

Inną kwestią jest to, że BDB nie jest SQL DBMS, jest to silnik pamięci masowej. Więc jeśli nie napisał on implementacji SQL na bazie BDB, wydaje się, że będzie trochę więcej pracy do połączenia z SQL niż z innym silnikiem pamięci. – Ferruccio

+0

@Ferruccio, nie musi portować do SQL, może po prostu zaimplementować interfejs API podobny do BDB na bazie SQL. z łatwością. –

0

db4o jest dość tani i szybki, ale może być stosowany tylko z Java lub .NET

+0

db4o wygląda ładnie, ale niestety jest to aplikacja C++ ... –

+1

db4o jest absolutnie niewłaściwą alternatywą dla BerkeleyDB. dodatkowo db4o nie oferuje nieodpłatnego modelu licencjonowania. Są naliczane za każde wdrożenie. –

+0

całkiem tani jak w 1200 $ – KJW

0

Firebird jest twoim najlepszym przyjacielem.

+0

Firebird to bardzo dobra ** baza danych SQL **.Nie wspaniale jako DB pamięci, ale prawdopodobnie lepiej niż większość dzięki bardzo dobrej obsłudze BLOB. –

+1

Czy możesz rozwinąć trochę więcej o "nie świetne jako DB pamięci"? Chciałbym także usłyszeć więcej na temat tego, co Firebird NIE jest wielki (cena? Rozmiar? :)) –

18

Można spojrzeć na Tokyo Cabinet. Jest następcą qdbm/gdbm, a jeśli zdecydujesz się na skalowanie, masz dostęp do miłej sieciowej usługi front-end.

Edit:

Innym wariantem jest Kyoto Cabinet; opracowany przez tę samą osobę, ale podobno łatwiejszy w użyciu.

8

można uzyskać znacznie lepszą wydajność z dowolnego dBm (nawet qdbm) oraz poprawę zbieżności z prostym poziomie zadnie: Wystarczy wziąć klucze i hash je i używać data_dir/H(key)/ jako bazę danych do przechowywania tych kluczy. Ogranicz wynik mieszania do małej wartości (powiedzmy) 255, aby uzyskać najlepsze wyniki.

Takie podejście ma szereg zalet, łatwo podsumować:

  • Koncepcyjnie proste
  • łatwe do wdrożenia i testu
  • nie blokuje całą bazę danych o aktualizacjach
  • może obsługiwać znacznie większe bazy danych
  • Łatwy do wymiany komponent DBM

Mieszanie prawdopodobnie nie musi być bezpieczne pod kryptografią; po prostu w większości jednolite. DJB's cdb hash działa dobrze w większości przypadków.

+0

Interesująca sugestia, ale jest trochę ortogonalna. Zalety używania tablic asocjacyjnych a posortowanej struktury typu btree to inny temat. – gonzojive

3

Możesz spróbować JDBM. Jest to bezpłatny magazyn kluczy i wartości (Apache 2) z utrwalaniem dysku. Proste API i wysoka wydajność

20

C/C++

Java