Звучит ли эта схема лучше для хранилища данных, ориентированного на документы, или для реляционного?

StackOverflow https://stackoverflow.com/questions/2505900

Вопрос

Отказ от ответственности:дайте мне знать, если этот вопрос лучше подходит для serverfault.com


Я хочу хранить информацию о музыке, в частности:

  • жанры
  • Художники
  • Альбомы
  • песни

Эта информация будет использоваться в веб-приложении, и я хочу, чтобы люди могли видеть все песни, связанные с альбомом, и альбомы, связанные с исполнителем, и исполнителей, связанных с жанром.

В настоящее время я использую MySQL, но прежде чем я приму решение о переключении, я хочу знать:

  1. Насколько легко масштабировать по горизонтали?
  2. Проще ли управлять им, чем решением на основе SQL?
  3. Будут ли приведенные выше данные, которые я хочу сохранить, слишком сложными для выполнения без схемы?
  4. Когда я думаю об ассоциации, я сразу же думаю о РСУБД;могут ли данные храниться во что-то вроде CouchDB, но при этом иметь какую-то связь, как указано выше?
  5. Моему веб-приложению требуется репликация, насколько хорошо CouchDB или другие справляются с этим?
Это было полезно?

Решение

Такого рода информация идеально подходит для документирования баз данных.Как и в случае со многими реальными данными, они по своей сути не являются реляционными, поэтому включение их в реляционную схему вызовет головную боль в дальнейшем (даже при использовании ORM - я говорю по опыту).Ubuntu уже использует CouchDB для хранения метаданных музыки, а также других вещей в своих Один продукт.

Отвечаю на остальные ваши вопросы один за другим:

  1. Горизонтальное масштабирование - это СПОСОБ проще, чем с РСУБД.Это одна из многих причин, по которой крупные сайты, такие как Facebook, Digg и LinkedIn, используют или активно исследуют базы данных без схемы.Например, сегментирование (разделение ваших данных по разным узлам системы) прекрасно работает благодаря концепции, называемой Конечная Согласованность;т.е. данные могут некоторое время быть несогласованными между узлами, но в конечном итоге они перейдут в согласованное состояние.
  2. Это зависит от того, что вы подразумеваете под "управлять"...Установка, как правило, выполняется быстро и легко.Нет учетных записей пользователей для настройки и защиты (вместо этого обычно это делается на уровне бизнес-логики приложения).Работа с базой данных документов в режиме реального времени может быть интересной:например, в CouchDB нет специальных запросов;вы должны использовать пользовательский интерфейс Futon или взаимодействовать с ним с помощью HTTP-запросов.MongoDB, однако, поддерживает специальные запросы.
  3. Мне не следовало бы так думать.Ответ Бастьена дает хороший пример документа JSON, сериализующего некоторые данные.Прелесть БД без схем заключается в том, что поля могут отсутствовать в одном документе и присутствовать в другом, или документы могут полностью отличаться друг от друга.Это устраняет многие проблемы, связанные с СУБД' null ценности, которых много и они разнообразны.
  4. ДА;ассоциации хранятся в виде вложенных документов, которые анализируются в вашем приложении как ссылки на объекты, коллекции и т.д.В ответе Бастьена клавиша "песни" идентифицирует массив документов песни.
  5. Это очень похоже на ваш первый вопрос о горизонтальном масштабировании (горизонтальное масштабирование и репликация взаимосвязаны).Как говорится в упомянутом Бастьеном сообщении в блоге CouchIO, "Репликация … была встроена в CouchDB с самого начала"..Насколько я понимаю, все базы данных документов хорошо справляются с репликацией, и сделать это проще, чем настроить ее в СУБД.

Если бы вы решили сохранить сам файл песни вместе с метаданными, вы могли бы сделать это также в CouchDB, предоставив файл песни в качестве вложения к документу;более того, в результате этого у вас не возникнет никаких несоответствий схемы, потому что схемы нет!

Надеюсь, я не допустил здесь слишком много ошибок;Я сам довольно новичок в документировании DBS.

Другие советы

Ваши данные кажутся идеальными для баз данных, ориентированных на документы.
Пример документа:
{
"type":"Album",
"artist":"ArtistName",
"album_name":"AlbumName",
"songs" : [
{"title":"SongTitle","duration":4.5}
],
"genres":["rock","indie"]
}

А репликация - одна из самых крутых функций CouchDB ( http://blog.couch.io/post/468392274/whats-new-in-apache-couchdb-0-11-part-three-new )
Возможно, вы также захотите взглянуть на Riak.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top