Przeglądałem stronę Wikipedii dotyczącą NoSQL i zawiera ona kilka odmian bazy danych magazynu kluczy / wartości, ale nie mogę znaleźć żadnych szczegółów na temat tego, co to znaczy przez magazyn kluczy / wartości w tym kontekście. Czy ktoś mógłby mi wyjaśnić lub powiązać wyjaśnienie ze mną? Ponadto kiedy miałbym korzystać z takiej bazy danych?
56
Odpowiedzi:
Czy znasz koncepcję pary klucz / wartość? Zakładając, że znasz Java lub C #, jest to w języku map / hash / datatable / KeyValuePair (ostatnia jest w przypadku C #)
Sposób działania pokazano na poniższym przykładowym wykresie:
Jeśli masz klucz (po lewej) i wartość (po prawej) ... zauważ, że może to być ciąg, int lub tym podobne. Większość obiektów KVP pozwala przechowywać dowolny obiekt po prawej stronie, ponieważ jest to tylko wartość.
Ponieważ zawsze będziesz mieć unikalny klucz do konkretnego obiektu, który chcesz zwrócić, możesz po prostu zapytać bazę danych o ten unikalny klucz i uzyskać wyniki z dowolnego węzła, który ma obiekt (dlatego jest dobry dla systemów rozproszonych, ponieważ istnieją inne rzeczy, takie jak odpytywanie dla pierwszych n węzłów, aby zwrócić wartość pasującą do zwrotów innych węzłów).
Teraz mój przykład powyżej jest bardzo prosty, więc oto nieco lepsza wersja KVP
Jak widać, proste generowanie klucza polega na umieszczeniu „użytkownika” unikalnego numeru użytkownika, znaku podkreślenia i obiektu. Ponownie, jest to prosta odmiana, ale myślę, że zaczynamy rozumieć, że dopóki możemy zdefiniować część po lewej stronie i konsekwentnie ją sformatować, możemy wyciągnąć wartość.
Zauważ, że nie ma ograniczeń co do wartości klucza (ok, mogą istnieć pewne ograniczenia, takie jak tylko tekst) lub właściwości value (mogą istnieć ograniczenia rozmiaru), ale jak dotąd nie miałem naprawdę złożonych systemów. Spróbujmy pójść trochę dalej:
Wpadłeś na pomysł ... wszystkie te byłyby przechowywane w jednej ogromnej „tabeli” w rozproszonych węzłach (za tym wszystkim kryje się matematyka) i po prostu zapytałeś system rozproszony o wartość, której potrzebujesz według nazwy.
Przynajmniej tak rozumiem, jak to wszystko działa. Mogę mieć kilka rzeczy źle, ale to są podstawy.
obowiązkowy link do Wikipedii http://en.wikipedia.org/wiki/Associative_array
źródło
user1923_color: red, user1923_age: 18, ...
w przeciwieństwie douser1923: {color: red, age: 18, ...}
.W ujęciu SQL baza danych NoSQL to pojedyncza tabela z dwiema kolumnami: jedna jest kluczem (podstawowym), a druga jest wartością. I to wszystko, to cała magia NoSQL.
Używałbyś NoSQL z jednego głównego powodu: skalowalności.
Jeśli Twoja aplikacja musi obsługiwać miliony zapytań na sekundę, jedynym sposobem na osiągnięcie tego jest dodanie większej liczby serwerów. To jest bardzo tanie i łatwe z NoSQL. Natomiast skalowanie tradycyjnej bazy danych SQL jest znacznie bardziej skomplikowane.
Tylko największe witryny faktycznie korzystają z pełnego potencjału NoSQL, tj. Facebook, mając tysiące serwerów z Cassandrą .
Zdecydowanie polecam przeczytać ten post na blogu, porównując SQL, NoSQL i ORM:
http://seldo.com/weblog/2010/07/12/in_defence_of_sql
źródło
Zakładam, że masz podstawową wiedzę na temat ruchu NoSQL i modeli nierelacyjnych baz danych.
Magazyn wartości kluczowych jest jednym z nierelacyjnych modeli baz danych, takich jak wykresy, modele baz danych zorientowane na dokumenty.
when would I use such a database?
Could someone explain or link an explanation to me?
To raczej decyzja architektoniczna i dyskusyjna ... Musisz wziąć pod uwagę wiele czynników, takich jak skalowalność, wydajność itp.
Zobacz poniższe slajdy / artykuły, a dowiesz się, kiedy, dlaczego i dlaczego nie skorzystać ze sklepu z kluczowymi wartościami :)
źródło
Inni to wyjaśnili, ale i tak zamierzam go dźgnąć.
Baza danych kluczy / wartości przechowuje dane według klucza podstawowego. To pozwala nam jednoznacznie zidentyfikować rekord w wiadrze. Ponieważ wszystkie wartości są unikalne, wyszukiwania są niezwykle szybkie: zawsze jest to zwykłe wyszukiwanie dysku.
Wartość jest po prostu jakąkolwiek wartością. Sposób przechowywania danych jest nieprzejrzysty dla samej bazy danych. Kiedy przechowujesz dane w magazynie kluczy / wartości, baza danych nie wie ani nie obchodzi, czy jest to XML, JSON, tekst czy obraz. W efekcie to, co robimy w magazynie kluczy / wartości, przenosi odpowiedzialność za zrozumienie, w jaki sposób dane są przechowywane z bazy danych w aplikacjach, które pobierają nasze dane. Ponieważ masz tylko jeden zakres kluczy do zmartwienia dla każdego segmentu, bardzo łatwo jest rozłożyć klucze na wiele serwerów i użyć rozproszonych technik programowania, aby umożliwić szybki dostęp do tych danych (każdy serwer przechowuje zakres danych) .
Wadą tego podejścia do danych jest to, że wyszukiwanie jest bardzo trudnym zadaniem. Musisz albo odczytać każdy rekord w segmencie danych, albo samodzielnie zbudować indeksy wtórne .
Istnieje kilka powodów, dla których warto skorzystać z bazy danych kluczy / wartości:
Istnieje tak wiele powodów, aby używać bazy danych kluczy / wartości, jak RDBMS, i tyle samo argumentów uzasadnia się jeden nad drugim. Ważne jest, aby przyjrzeć się, w jaki sposób odpytujesz swoje dane i zrozumieć, w jaki sposób ten wzorzec dostępu do danych określa sposób wstawiania i przechowywania danych.
Pamiętaj tylko, że baza danych kluczy / wartości jest tylko jednym typem bazy danych NoSQL.
źródło
Jeśli masz relacyjną bazę danych, możesz łatwo eksperymentować z tym:
Tak były kiedyś wszystkie bazy danych, z dobrym przykładem Berkeley DBM , od 1979 roku. Od tego czasu wszystko się rozwinęło ( w każdym RDBMS można mieć wiele wartości na klucz). W przypadku wielu aplikacji wystarczający jest magazyn kluczy i wartości (np. W ten sposób sendmail przechowuje swoje aliasy). Ale jeśli wcześniej przetwarzasz wartość we własnym kodzie (lub konkatenujesz ciągi znaków, aby utworzyć „klucz”), być może dzieląc wartość na separator lub analizując go, zanim będzie można go użyć, prawdopodobnie lepiej RDBMS i przechowywanie go w ten sposób.
źródło