it-swarm.dev

Co to jest baza danych magazynu kluczy / wartości?

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ś może mi wytłumaczyć lub powiązać wyjaśnienie? Ponadto kiedy miałbym korzystać z takiej bazy danych?

56
indyK1ng

Czy znasz koncepcję pary klucz/wartość? Zakładając, że znasz Java lub C # to jest w języku jako map/hash/datatable/KeyValuePair (ostatnia jest w przypadku C #)

Sposób działania pokazano na poniższym przykładowym wykresie:

Color        Red
Age          18
Size         Large
Name         Smith
Title        The Brown Dog

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 w celu zwrócenia wartości pasującej do zwrotów innych węzłów).

Teraz mój przykład powyżej jest bardzo prosty, więc oto nieco lepsza wersja KVP

user1923_color    Red
user1923_age      18
user3371_color    Blue
user4344_color    Brackish
user1923_height   6' 0"
user3371_age      34

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ę skomplikowanych systemów. Spróbujmy pójść trochę dalej:

app_setting_width      450
user1923_color         Red
user1923_age           18
user3371_color         Blue
user4344_color         Brackish
user1923_height        6' 0"
user3371_age           34
error_msg_457          There is no file %1 here
error_message_1        There is no user with %1 name
1923_name              Jim
user1923_name          Jim Smith
user1923_lname         Smith
Application_Installed  true
log_errors             1
install_path           C:\Windows\System32\Restricted
ServerName             localhost
test                   test
test1                  test
test123                Brackish
devonly
wonderwoman
value                  key

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

42
jcolebrand

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 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, na którym działają tysiące serwerów Cassandra .

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

25
vz0

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.

Magazyny kluczowych wartości i ruch NoSQL

Ogólnie SQL radził sobie ze specjalnie ustrukturyzowanymi danymi i umożliwiał wysoce dynamiczne zapytania zgodnie z potrzebami danego działu.

Chociaż nadal nie ma prawdziwych konkurentów dla SQL w tej konkretnej dziedzinie, przypadek użycia w codziennych aplikacjach internetowych jest inny. Nie znajdziesz wysoce dynamicznego zakresu zapytań pełnych połączeń zewnętrznych i wewnętrznych, związków i złożonych obliczeń na dużych tabelach. Zazwyczaj znajdziesz bardzo zorientowany obiektowo sposób myślenia. Zwłaszcza przy przyjęciu takich wzorców, jak MVC, dane w zapleczu zwykle nie są modelowane dla bazy danych, ale dla logicznej integralności, która pomaga również ludziom poradzić sobie ze zrozumieniem ogromnej infrastruktury oprogramowania. Aby umieścić te modele obiektowe w relacyjnych bazach danych, należy przeprowadzić dużą normalizację, która prowadzi do skomplikowanych hierarchii tabel i całkowicie przeciwstawia się głównej idei programowania obiektowego. Serwery, które są zgodne ze standardem SQL, muszą także implementować dużą część kodu, który nie przydaje się do prostego przechowywania danych, co powoduje, że tylko powiększa pamięć, zagraża bezpieczeństwu i w rezultacie ma negatywny wpływ na wydajność.

Fakt, że SQL pozwala na dowolne dynamiczne zapytania dla złożonych zestawów danych, staje się bezużyteczny dzięki użyciu bazy danych SQL tylko do trwałego przechowywania danych obiektowych, co w zasadzie robi większość aplikacji w dzisiejszych czasach.

To tutaj wchodzą sklepy Key Value. Key value stores allow the application developer to store schema-less data. This data is usually consisting of a string which represents the key and the actual data which is considered to be the value in the "key - value" relationship. Same dane są zwykle pewnego rodzaju prymitywem języka programowania (ciąg, liczba całkowita, tablica) lub obiektem, który jest zestawiany przez powiązania języków programowania ze składnicą wartości klucza. Zastępuje to potrzebę posiadania stałego modelu danych i sprawia, że ​​wymóg dotyczący poprawnie sformatowanych danych jest mniej rygorystyczny.

They all allow storage of arbitrary data which is being indexed using a single key to allow retrieval. Największą różnicą w przypadku „prostszych” sklepów jest sposób (lub niemożność) uwierzytelnienia lub uzyskania dostępu do różnych sklepów (jeśli to możliwe). Chociaż przewaga szybkości w przechowywaniu i pobieraniu danych może być powodem do rozważenia tego w porównaniu ze zwykłymi bazami danych SQL, kolejną dużą zaletą, która pojawia się podczas korzystania z magazynów kluczy i wartości, jest to, że wynikowy kod wydaje się być czysty i prosty w porównaniu z osadzonymi ciągami SQL w twój język programowania. Jest to coś, z czym ludzie walczą przy użyciu struktur mapowania obiektowo-relacyjnego, takich jak Hibernacja lub Active Record. Posiadanie obiektowych maperów relacyjnych wydaje się w zasadzie emulować magazyn wartości klucza poprzez dodanie wielu naprawdę złożonych kodów między bazą danych SQL a obiektowym językiem programowania.

Cała społeczność ludzi zbiera się pod tagiem „ NoSQL ” i dyskutuje o zaletach i wadach korzystania z alternatyw dla systemów zarządzania bazami danych. czytaj więcej
To jest trochę stary artykuł, ale uważam go za bardzo przydatny.

when would I use such a database?Could someone explain or link an explanation to me?
To bardziej 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 :)

14
CoderHawk

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. Gdy przechowujesz dane w magazynie kluczy/wartości, baza danych nie wie ani nie dba o to, 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 przeczytać każdy rekord w swoim segmencie danych, albo sam musisz zbudować indeksy wtórne .

Istnieje kilka powodów, dla których warto skorzystać z bazy danych kluczy/wartości:

  • Kiedy wydajność zapisu jest twoim najwyższym priorytetem. Mozilla Test Pilot używa bazy danych kluczy/wartości do szybkiego rejestrowania danych.
  • Kiedy odczyty są gwarantowane tylko przez PK.
  • Podczas pracy z płaskim modelem danych.
  • Podczas pracy z bogatym, złożonym modelem danych, którego nie można modelować w RDBMS.

Istnieje tak wiele powodów, by 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 klucz/wartość jest tylko jednym typem bazy danych NoSQL.

12
Jeremiah Peschka

Jeśli masz relacyjną bazę danych, możesz łatwo eksperymentować z tym:

create table keyvalue (my_key varchar2(255), my_value varchar2(255));
create unique index ix_keyvalue on keyvalue (my_key, my_value);

Tak były kiedyś wszystkie bazy danych, przy czym Berkeley DBM jest dobrym przykładem, od 1979 roku. Od tego czasu wszystko się rozwinęło (możesz mieć wiele wartości na klucz w dowolnym RDBMS). 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.

8
Gaius