2009-10-24 10 views
12

Tak więc patrzę na różne kluczowe: wartość (gdzie wartość jest albo ściśle jedną wartością lub ewentualnie obiekt) przechowuje do użycia z Pythonem, i znalazłem kilka obiecujących. Nie mam żadnych szczególnych wymagań, ponieważ jestem na etapie oceny. Szukam tego, co jest dobre, co jest złe, jakie są sprawy narożne, które te rzeczy dobrze sobie radzą lub nie, itd. Jestem pewien, że niektórzy z was już je wypróbowali, więc chciałbym usłyszeć twoje odkrycia/problemy /itp. na różnych kluczach: value stores with Python. Szukam przede wszystkim:Który klucz: przechowywać wartość do użycia w Pythonie?

memcached - klientów http://www.danga.com/memcached/ Pythonie http://pypi.python.org/pypi/python-memcached/1.40http://www.tummy.com/Community/software/python-memcached/

couchdb - http://couchdb.apache.org/ klientów python: http://code.google.com/p/couchdb-python/

Tokio Tyrant - http://1978th.net/tokyotyrant/ klientów python: http://code.google.com/p/pytyrant/

Lightcloud - http://opensource.plurk.com/LightCloud/ Based na Tokyo Tyrant, napisany w Pythonie

R EDIS - http://redis.io/ klienci python: http://pypi.python.org/pypi/txredis/0.1.1

MemcacheDB - http://memcachedb.org/

Więc zacząłem benchmarkingu (wystarczy włożyć klucze i je czytać) za pomocą prostego licznika do generowania kluczy numerycznych i wartość „krótki ciąg tekstu”:

memcached: CentOS 5.3/python-2.4.3-24.el5_3.6, libevent 1.4.12-stable, memcached 1.4.2 z ustawieniami domyślnymi, 1 gig pamięci, 14 000 wstawek na sekundę, 16 000 sekund do przeczytania. Brak realnej optymalizacji, miło.

zapłata memcachedb od 17 000 do 23 000 wkładów na sekundę, od 44 000 do 64 000 odczytów na sekundę.

Zastanawiam się również, w jaki sposób inni układają się z większą prędkością.

+0

przechowywania wartości klucza? Masz na myśli bazę danych? – Soviut

+2

więcej informacji na temat wymagań? (rozmiar bazy danych, liczba wpisów, itd.) – peufeu

+1

CouchDB nie jest kluczem: wartość sama w sobie, to baza danych dokumentów, ponieważ przechowywane dane to nie tylko arbitralne dane, ale dokument json. Pojawia się pytanie, dlaczego szukasz bardziej konkretnie? Schemaless baz danych, czy jest to naprawdę tylko klucz: warto sklepu, czego potrzebujesz? Jeśli chcesz bazy danych Schemaless powinieneś włączyć ZODB na tej liście. –

Odpowiedz

-1

Co z Amazon SimpleDB?

Istnieje biblioteka python typu open source o nazwie boto for python łącząca usługi internetowe Amazon.

+3

Wydajność (opóźnienie głównie, zdalne = wolne) i koszt, wolałbym uruchomić go lokalnie. – Kurt

3

półka (przechowywanie dictonaris w pliku/Standardowy moduł Pythona)

ZODB - baza obiekt persisatnce (python obiektów bazy danych, nie SQL)

więcej narzędzi Trwałość: http://wiki.python.org/moin/PersistenceTools

+0

Fajnie, nie pomyślałem by użyć słowa "trwałość" jako słowa kluczowego, ale ma to sens. – Kurt

+0

Też podoba mi się ten aproach. W ten sposób masz bazę danych, która pochodzi z języka Python. To, czego potrzebujesz w programie, to coś takiego (ostrzeżenie pseudokodowe) a = load_database (database) newtable = {} newtable ['key'] = 'value' a ['new_table'] = newtable a.save –

3

Moi 5 centów:

Potrzebujesz systemów rozproszonych o danych rozmiaru bajtowego lub masowej wydajności zapisu?

Cóż, potrzebna jest jedna z najważniejszych rzeczy typu value/BigTable/Dynamo. To by Cassandra, Tokio Tyrant, Redis, itp. Musisz upewnić się, że biblioteka klienta obsługuje sharding, dzięki czemu możesz mieć wiele baz danych, do których możesz pisać. O tym, który z nich można tu wybrać, mogą decydować tylko Ty, testując dane, które wyglądają tak, jak myślisz.

Czy chcesz, aby dane były dostępne z innych systemów/języków niż język Python?

Ponieważ te bazy danych w ogóle nie mają struktury dla swoich danych, jeśli są dostępne z innych języków/klientów, zależy to od tego, co użytkownik w nich zapisuje. Ale jeśli potrzebujesz tego CouchDB jest dobrym wyborem, ponieważ przechowuje jego dane, dokumenty JSON, więc masz interoperacyjność. Jak dobrze CouchDB jest na naprawdę masywnych danych i shardingu jest niejasne.

Czy nie potrzebujesz interoperacyjności z innymi językami niż Python lub rozproszona pamięć masowa dla wielu serwerów?

Użyj ZODB.

+2

Najlepsza część: użyj ZODB . Jeśli chcesz go skalować, jest do tego serwer (patrz ZEO). –

Powiązane problemy