#database-design #nosql #couchdb
#база данных-дизайн #nosql #couchdb
Вопрос:
Я только начал играть с couchdb, и пока мне это действительно нравится, но мне было интересно, когда вам следует создать новую базу данных.
Вот что я имею в виду:
Если бы я должен был создать блог на сервере с несколькими блогами, и это была СУБД, я бы создал базу данных под названием fox_blog и создал таблицы и отношения для сообщений, комментариев и т.д..
Теперь в CouchDB я бы просто создал 3 типа документов: сообщения, комментарии и учетные записи пользователей.
Но вот мой вопрос: могу ли я создать одну базу данных с именем fox_blog и добавить поле ‘type’ к каждому из документов (например, в документах posts было бы поле ‘type’ со значением ‘post’)? Или я должен создать отдельную базу данных для каждого документа и предварять имя fox_ (например, имя базы данных будет fox_posts для сообщений)? Или ни один из этих вариантов не верен?
Дайте мне знать, если что-то из этого неясно, это было немного сложно объяснить, хех
Ответ №1:
Вы должны создать единую базу данных с полем типа в каждом документе.
Возможно, вы захотите написать представление, которое возвращает документ и все его комментарии вместе.
Ответ №2:
Как правило, я стараюсь хранить отдельные приложения в каждой из их собственных баз данных. В этом случае, если доступ ко всем различным блогам осуществляется в рамках одного интерфейса, сохраните его в одной базе данных, используя поля типа type
и blog
для идентификации каждого документа.
Если у вас запущено несколько блогов, доступ к каждому из которых осуществляется в их собственном домене или по адресу, вы можете рассмотреть возможность сегментирования каждого из блогов в их собственную базу данных. В принципе, CouchDB предоставляет вам здесь большую гибкость, так что воспользуйтесь этим и поэкспериментируйте.
Комментарии:
1. Единственное, что мешает мне сделать это, — это то, как couch обновляет свои представления каждый раз, когда происходит обновление. Итак, возьмем, к примеру, комментарии. Они обновляются намного чаще, чем записи в блоге, поэтому не было бы лучше в некоторых случаях отделять комментарии от сообщений (при условии, что у меня нет представления, которое по какой-то странной причине объединяет сообщения и комментарии)?
2. Хорошая дискуссия. Fox, вы правы в том, что есть больше обновлений, однако CouchDB будет обрабатывать (сопоставлять / сокращать) каждый документ по одному разу, в основном после его сохранения. Независимо от того, распределены ли они на несколько баз данных или хранятся только в одной, это будет примерно одно и то же. Я согласен с Домиником, эмпирическое правило: при запуске сохраняйте его в одной базе данных.
3. Хорошо, я пока сохраняю все свои поля в одной базе данных, и это выглядит довольно неплохо. Но, насколько я понимаю, если я обнаружу, что определенный тип документа не используется в представлениях, которые включают другие документы, было бы неплохо переместить его в собственную базу данных. Правильно ли это мышление?
Ответ №3:
Что еще более важно, выполнение запросов через несколько баз данных напрямую не поддерживается, хотя есть способы обойти это.
В вашем случае сообщения, комментарии и учетные записи в отдельных базах данных вообще не будут работать.
Вы могли бы использовать либо ввод с уткой, либо использование поля типа «публикация / комментарий» и т.д.
CouchDB имеет встроенную базу данных пользователей, которая также доступна в вашем приложении.