2010-11-22 8 views
18

Krótkie pytanie: Czy dostępna jest baza danych płaskich plików nosql jako sqlite?Czy istnieje baza danych płaskich plików nosql tak samo jak sqlite?

Objaśnienie: Baza danych plików płaskich może być otwierana w różnych procesach do odczytu i przechowywać jeden proces do zapisu. Myślę, że jest to idealne rozwiązanie do czytania w pamięci podręcznej, jeśli nie ma ścisłej, spójnej potrzeby. Powiedz 1-2 s do zapisu do pliku, a nawet do bloku pamięci, a czytelnicy otrzymują później zaktualizowane dane.

Tak więc prawie zdecydować się na użycie sqlite, jak mój pamięć podręczna Pythona odczytuje serwer. Ale wciąż jest jeden problem. Nie lubię przepisywania sqls ponownie w innym miejscu i skonstruować kolejną kopię moich tabel danych w sqlite tak samo jak w PostgreSql, który używany jako back-end bazy danych.

więc czy istnieje jeszcze inny wybór? Dzięki!

Odpowiedz

9

Może shelve? Jest to w zasadzie magazyn klucz-wartość, w którym można przechowywać obiekty Pythona. http://docs.python.org/library/shelve.html

A może mógłbyś po prostu użyć systemu plików?

+0

Zdecydowanie polecam z półką. Używam load/dump z pikla w osobnych plikach dla szybkiego dostępu, ale półka jest realną opcją. – vonPetrushev

+0

.... Po prostu to zapomniałem! Dziękuję bardzo za przypomnienie mi tego wspaniałego rozwiązania dostarczanego z pythonem! – davyzhang

+1

Należy zauważyć, że dla współbieżnych odczytów/zapisów 'shelve' nie jest realną alternatywą dla sqlite. Z dokumentacji Pythona: "Moduł półki nie obsługuje równoczesnego odczytu/zapisu dla obiektów półkowych. (Wielokrotne jednoczesne dostępy do odczytu są bezpieczne.) Gdy program ma półkę otwartą do pisania, żaden inny program nie powinien mieć otwartego do czytania lub W celu rozwiązania tego problemu można użyć blokowania plików Unix, ale różni się on w wersjach Unix i wymaga wiedzy na temat implementacji bazy danych. " Z drugiej strony, sqlite jest zgodny z ACID na wszystkich obsługiwanych systemach i wykonuje dla ciebie blokowanie. – chadrik

6

BerkeleyDB jest szeroko stosowaną wbudowaną bazą danych, która istnieje od zawsze (pochodzi pierwotnie z biblioteki bazy danych zawartej w BSD, stąd nazwa) i ma doskonałe właściwości wydajności w wielu przypadkach użycia (i często używane jest buforowanie), ale ma pewne istotne ograniczenia.

Jeśli chcesz go używać z Pythonem, prawdopodobnie będziesz potrzebować externally-maintained pybsddb/bsddb3 library, a nie deprecated bsddb library w Pythonie 2.x (i nie będzie już 3.x).

Jest obecnie własnością firmy Oracle, ale jest dostępna na licencji open source. Zwróć szczególną uwagę na warunki licencji - aktualne wersje są GPL (i zgodne z GPL), więc upewnij się, że jest to zgodne z tym, co planujesz zrobić.

Więcej informacji:

+3

wielkie dzięki za rekomendację!ale po tym, jak zobaczyłem, co zrobili mysql, odejdę od wyroczni. Ale naprawdę uważałem bsdb za porównanie z sqlite. Jeśli go nie sprzedadzą, na pewno pójdę z tym. Dziękujemy za informacje, które podasz. Jest cenny. – davyzhang

+0

BerkelyDB kosztuje 15 000 USD + więcej w opłatach licencyjnych, nawet w przypadku prostych aplikacji na iPhone'a. Może więcej, jeśli twoje imię i startup wygląda bardziej obiecująco niż moje. – Lothar

+0

@Lothar BDB to bezpłatne oprogramowanie. Możesz z niego stworzyć darmowe oprogramowanie bez żadnych opłat licencyjnych. – bugmenot123

0

Coś trywialne, ale wykonalne, jeśli szukasz przechowywanie kopii zapasowej wartość klucza wykorzystanie struktury danych marynowane słownika. Użyj cPickle dla lepszej wydajności w razie potrzeby.

+0

Sqlite lub Firebird używają tylko jednego stołu. Lub składnik bazy danych z projektu OpenLDAP, który jest bardzo szybki. http://symas.com/mdb/ – Lothar

Powiązane problemy