Звучит ли эта схема лучше для документно-ориентированного хранилища данных или реляционного? - PullRequest
3 голосов
/ 24 марта 2010

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


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

  • жанры
  • художники
  • 1011 * альбомы *
  • песни

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

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

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

Ответы [ 2 ]

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

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

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

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

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

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

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

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

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

...