Базы данных Key-Value, может кто-нибудь объяснить мне, как их использовать практически? - PullRequest
5 голосов
/ 24 марта 2009

Похоже, что есть большой толчок для баз данных, основанных на ключах / значениях, что я считаю memcache.

Является ли значение, как правило, своего рода коллекцией или XML-файлом, который будет содержать более значимые данные?

Если да, как правило, быстрее десериализовать данные, чем традиционно выполнять JOINS и выбирать таблицы, которые возвращают набор результатов на основе строк?

Ответы [ 4 ]

6 голосов
/ 24 марта 2009

Произошло то, что некоторые действительно, действительно , ДЕЙСТВИТЕЛЬНО большие веб-сайты, такие как Google и Amazon, занимают крошечную, крошечную нишу, где их требования к хранению и поиску данных настолько отличаются Кто-нибудь еще, что новый способ хранения / извлечения данных требуется. Я уверен, что эти парни знают, что они делают, они очень хороши в том, что они делают.

Тем не менее, затем это воспринимается и отражается в «реляционных базах данных не для обработки данных для Интернета». Кроме того, читатели начинают думать: «Эй, если реляционные базы данных недостаточно хороши для Amazon и Google, они не достаточно хороши для меня».

Оба эти вывода неверны: 99,9% всех баз данных (включая те, что находятся за веб-сайтами) не находятся в том же парке, что и Amazon и Google, - не в пределах нескольких порядков. Для этих 99,9% ничего не изменилось, реляционные базы данных по-прежнему работают просто отлично.

3 голосов
/ 24 марта 2009

Как и в большинстве вещей, «это зависит». Если объединения относительно несущественны (т. Е. Небольшое количество объединений данных с хорошими ключами), и вы храните особенно сложные данные, может быть, лучше придерживаться более сложного запроса.

Это также вопрос свежести. Во многих случаях целью многих объединений является объединение очень разнородных данных; то есть данные, которые сильно различаются по своей относительной свежести. Он может добавить значительную сложность и накладные расходы для синхронизации таблицы пар ключ-значение при обновлении небольшого фрагмента данных по большому количеству пар. Сложность системы часто можно рассматривать как форму стоимости производительности; время, риск и стоимость внесения изменений в сложную систему без ущерба для производительности часто намного больше, чем простая.

Лучшим решением всегда является код, который работает так просто, как вы можете . В большинстве случаев я бы сказал, что это означает создать полностью нормализованный дизайн базы данных и присоединиться к нему. Пересмотрите свой дизайн только после того, как производительность станет очевидной проблемой. Когда вы проанализируете проблему, также будет очевидно, где проблемы лежат и что нужно сделать, чтобы их исправить. Если это сокращает число объединений, то пусть будет так. Вы будете знать, когда вам нужно знать.

2 голосов
/ 24 марта 2009

У меня нет большого опыта работы с ключами / значениями, поэтому возьмите то, что я говорю, с долей соли.

С учетом сказанного, первое, на что я должен обратить внимание, это то, что memcached не является ключом / значением база данных . База данных подразумевает какое-то постоянное хранилище, а memcached - нет. Memcached предназначен для временного хранения для сохранения запроса в фактической базе данных.

Кроме этого, я понимаю, что вы не сможете заменить свою СУБД базой данных ключ / значение. Они, как правило, лучше всего подходят для неструктурированных данных или других данных, где вы можете не знать все атрибуты, которые необходимо сохранить. Если вам нужно хранить высокоструктурированные данные, вы не сможете добиться большего успеха, чем традиционная СУБД.

1 голос
/ 24 марта 2009

Они могут быть сложными структурированными данными, которые нуждаются в десериализации. Они также могут быть простыми записями фиксированного размера, как и ваша СУБД. Частично выгода заключается в том, что вы сами принимаете это решение. Когда вы оптимизируете свою базу данных, вы не ограничены тем, что может делать SQL.

То, как вы спрашиваете, звучит как соединение или десериализация всегда будут узким местом. Но в любой базе данных все не так просто. Вы также можете поместить денормализованные данные в свою RDBMS или написать интерфейс RDBMS поверх базы данных значения ключа, если вы действительно этого хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...