Я просматривал страницу Википедии для NoSQL, и там перечислены несколько вариантов базы данных хранилища ключей / значений, но я не могу найти какие-либо подробности о том, что означает хранилище ключей / значений в этом контексте. Может ли кто-нибудь объяснить или связать объяснение со мной? Кроме того, когда я буду использовать такую базу данных?
56
Ответы:
Вы знакомы с концепцией пары ключ / значение? Предполагая, что вы знакомы с Java или C #, это на языке карты / hash / datatable / KeyValuePair (последнее в случае C #)
Как это работает, продемонстрировано на этом небольшом примере диаграммы:
Если у вас есть ключ (слева) и значение (справа) ... обратите внимание, что это может быть строка, int или тому подобное. Большинство объектов KVP позволяют вам хранить любой объект справа, потому что это просто значение.
Поскольку у вас всегда будет уникальный ключ для конкретного объекта, который вы хотите вернуть, вы можете просто запросить базу данных об этом уникальном ключе и получить результаты обратно от того, какой узел имеет объект (вот почему это хорошо для распределенных систем, поскольку существуют другие вещи, такие как опрос первых n узлов для возврата значения, соответствующего другим узлам, возвращается).
Теперь мой пример выше очень прост, так что вот немного лучшая версия KVP
Итак, как вы можете видеть, генерация простого ключа состоит в том, чтобы ввести «пользователь» уникальный пользовательский номер, подчеркивание и объект. Опять же, это простой вариант, но я думаю, что мы начинаем понимать, что до тех пор, пока мы можем определить часть слева и последовательно отформатировать ее, мы можем извлечь значение.
Обратите внимание, что нет никаких ограничений на значение ключа (хорошо, могут быть некоторые ограничения, такие как только текст) или на свойство значения (может быть ограничение размера), но до сих пор у меня не было действительно сложных систем. Давайте попробуем и пойдем немного дальше:
Вы понимаете, что все они будут храниться в одной большой «таблице» на распределенных узлах (за этим стоит математика), и вы просто спросите распределенную систему о нужном вам значении по имени.
По крайней мере, это мое понимание того, как все это работает. Я могу ошибаться, но это основа.
обязательная ссылка на Википедию http://en.wikipedia.org/wiki/Associative_array
источник
user1923_color: red, user1923_age: 18, ...
в отличие отuser1923: {color: red, age: 18, ...}
.В терминах SQL база данных NoSQL представляет собой одну таблицу с двумя столбцами: один является (первичным) ключом, а другой - значением. И это все, в этом вся магия NoSQL.
Вы бы использовали NoSQL по одной основной причине: масштабируемость.
Если вашему приложению необходимо обрабатывать миллионы запросов в секунду, единственный способ добиться этого - добавить больше серверов. Это очень дешево и легко с NoSQL. Напротив, масштабирование традиционной базы данных SQL намного сложнее.
Только самые большие веб-сайты на самом деле используют весь потенциал NoSQL, то есть Facebook, с тысячами серверов, работающих под управлением Cassandra .
Я настоятельно рекомендую прочитать этот пост, сравнивая SQL, NoSQL и ORM:
http://seldo.com/weblog/2010/07/12/in_defence_of_sql
источник
Я предполагаю, что у вас есть базовые знания о движении NoSQL и моделях нереляционных баз данных.
Хранилище ключей и значений является одной из моделей баз данных, не связанных с отношениями, таких как граф, модели баз данных, ориентированные на документы.
when would I use such a database?
Could someone explain or link an explanation to me?
Его больше архитектурного решения, и дискуссионная один ... Вы должны учитывать множество факторов, такие как масштабируемость, производительность и т.д. ...
Просмотрите слайды / статьи ниже, и вы поймете, когда, почему и почему не стоит использовать хранилище ключей :)
источник
Другие объяснили это, но я все равно собираюсь нанести удар.
База данных ключ / значение хранит данные по первичному ключу. Это позволяет нам однозначно идентифицировать запись в корзине. Поскольку все значения уникальны, поиск выполняется невероятно быстро: это всегда простой поиск по диску.
Ценность - это просто любая ценность. Способ хранения данных непрозрачен для самой базы данных. Когда вы сохраняете данные в хранилище ключей / значений, база данных не знает или не заботится, является ли это XML, JSON, текстом или изображением. По сути, то, что мы делаем в хранилище ключей / значений, переносит ответственность за понимание того, как данные хранятся из базы данных, в приложения, которые извлекают наши данные. Поскольку у вас есть только один диапазон ключей для каждой корзины, очень легко распределить ключи по многим серверам и использовать методы распределенного программирования, чтобы обеспечить быстрый доступ к этим данным (каждый сервер хранит диапазон данных) ,
Недостатком этого подхода к данным является то, что поиск является очень сложной задачей. Вам нужно либо прочитать каждую запись в ваших данных, либо создать собственные вторичные индексы самостоятельно.
Есть несколько причин, по которым вы можете использовать базу данных ключ / значение:
Причин для использования базы данных ключ / значение примерно столько же, сколько и для использования СУБД, и столько же аргументов, чтобы оправдать одно над другим. Важно взглянуть на то, как вы запрашиваете свои данные, и понять, как этот шаблон доступа к данным определяет, как вы собираетесь вставлять и хранить данные.
Просто помните, что база данных ключ / значение - это всего лишь один тип базы данных NoSQL.
источник
Если у вас есть реляционная база данных, вы можете легко поэкспериментировать с этим:
Именно так были все базы данных, примером чему может служить Berkeley DBM , начиная с 1979 года. С тех пор дела продвигаются вперед ( в любой RDBMS может быть много значений на ключ). Для многих приложений достаточно хранилища значений ключей (например, именно так sendmail хранит свои псевдонимы). Но если вы обнаружите, что предварительно обрабатываете значение в своем собственном коде (или объединяете строки для создания своего «ключа»), возможно, разбиваете значение на разделителе или анализируете его, прежде чем вы сможете его использовать, вам, вероятно, будет лучше с СУБД и на самом деле хранить его таким образом.
источник