CouchDB создает базу данных для каждого типа документа?

#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 имеет встроенную базу данных пользователей, которая также доступна в вашем приложении.