2009-10-23 10 views
8

Próbuję zawrzeć głowę w sklepach z kluczowymi wartościami, takimi jak CouchDB i Cassandra. Rozumiem, dlaczego są one przydatne, ale w miarę jak zastępują one RDBMS takie jak MySql, nie rozumiem tego.Zrozumienie przechwytywania wartości klucz-wartość

Powiedzmy to jest moje, co potrzebne do przechowywania:

{123456: {'model' : 'Ford' 
      'color': 'blue' 
      'MPG': 23}} 

Potem trzeba znaleźć wszystkie samochody, które są niebieskie.

W jaki sposób składnica klucz-wartość wysyła zapytanie do kluczy za pomocą wartości? Czytałem gdzieś, gdzie można użyć tej mapy-redukcji, ale patrząc na źródło kilku projektów, nie mogę znaleźć przykładu.

Daj mi znać, jeśli zadaję właściwe pytanie.

Odpowiedz

8

Zasadniczo, gdy używasz przechowuje klucz-wartość, tworzona jest baza danych z tych samych składników, które relacyjna baza danych wewnętrznie. Powodem tego jest większa kontrola i elastyczność nad skalowaniem i wydajnością lub po prostu dla prostoty.

W tym przypadku należy zapisać odpowiednik wierszy tabeli i indeksu jako dwie osobne rzeczy. Jeśli chcesz zindeksować kolor, musisz przechowywać

{'blue': {123456}} 

w odpowiedniku tabeli indeksów.

Oczywiście niektóre magazyny klucz-wartość udostępniają mechanizmy indeksowania i wyszukiwania, więc nie ma ogólnej zasady, która pasowałaby do wszystkich.

+0

Czy musi być: {{'color': 'blue'}: [123456]} W przeciwnym razie, skąd wiedziałaby, do czego odnosi się niebieski kolor. Co z tekstem? {'Lorem ipsum dolor sit amet, conisctetuer adipiscing elit ...': [123456]} Czy te kluczowe wartości lubią wyszukiwania? – user142006

+1

Zakładałem, że indeks będzie zawierał tylko kolor jako klucz. Szczegóły tego zależą od magazynu klucz-wartość, z którego będziesz korzystać. Wspomniałeś o dwóch różnych w swojej odpowiedzi, więc założyłem, że pytanie było bardziej ogólne pytanie o klucz i wartość. Redis, Hadoop, Tokyo Cabinet, Metakit, Berkeley db, gdbm - wszystkie oferują różne możliwości przechowywania kluczy. –

2

Chcesz zachować oddzielny magazyn klucz/wartość, który jest w zasadzie indeksem. Będzie miał "niebieski" jako klucz, a następnie listę wszystkich identyfikatorów z "głównego" sklepu z samochodami, które są niebieskie.

Tak, to powielanie funkcjonalności indeksu zwykłych rdbms.

To jest dobry artykuł o tym, jak zespół FriendFeed podszedł do tego problemu i zdecydował się na to rozwiązanie, wraz z ich uzasadnieniem (wiem, trochę dziwne, ponieważ używały RDBMS jako magazynu klucz/wartość, ale mówiące punkty to teoria dźwięku):
http://bret.appspot.com/entry/how-friendfeed-uses-mysql

Powiązane problemy