MongoDB/CouchDB
Я думаю, проще один из обоих, чтобы начать с MongoDB. У него немного больше похоже на старые добрые реляционные базы данных, потому что вы можете добавлять индексы в столбцы или операции вызова, такие как count. В CouchDB, насколько я знаю, вы скорее используете Map-Reduce для всех таких функций. Индекс генерируется в CouchDB так называемым views.
Также MongoDB сопоставляет базу данных, концепцию таблицы примерно с NoSQL (двухуровневый доступ к данным), тогда как CouchDB знает только один уровень (база данных).
mytable = Connection().mydatabase.mytable # MongoDB
mytable.save(document)
mydb = couchdb.Server()['mydatabase'] # CouchDB
mydb.save(doc)
Так что я предполагаю, что CouchDB может быть немного сложнее понять, в самом начале, потому что вы должны выбрать документы по какому-то типу (или использовать несколько DBS, но я думаю, что дополнительный атрибут type
это то, что люди используйте, см. это presentation by David Zuelke page 41. presentation by David Zuelke page 41
MongoDB обычно работает с API, который вы можете включить в свой язык программирования (если существует библиотека, но они существуют для большинства языков). Эти вызовы затем отправляются в двоичном формате на сервер. С другой стороны, CouchDB использует REST-API.
Структура данные
Вы можете посмотреть вокруг некоторых учебных пособий по сети. Они действительно часто объясняют что-то в отношении блогов, потому что блоги - хороший пример для документов, ориентированных на документы.
Давайте посмотрим на себя: у вас будет стол (или type
, если вы используете CouchDB) для своих сообщений. Каждый пост может иметь текст, некоторые теги, дату, комментарии. Дело в документе dbs заключается в том, что вы можете хранить все в стороне от документа и сохранять все эти отношения, связанные с отношениями dbs.
Это означает, что мы можем смоделировать наши посты, как это:
{type: post,
date: 2012-06-19 22:14:23,
author: user1462192,
text: Welcome to my blog,
comments: [
{author: Aufziehvogel,
date: 2012-06-19 22:14:45,
text: Hello!
},
{author: user1462192,
date: 2012-06-19 22:14:45,
text: Hello, too!
}
],
tags: [welcome, new, interesting]
}
Так вот что пост может выглядеть следующим образом.
Что вы всегда должны делать при разработке программного обеспечения. Подумайте, какие данные вы сохраните. Подумайте, как это связано. И тогда, как и для документированных баз данных, вам также нужно подумать о том, как вам нужно получить к нему доступ.
Иногда у вас могут быть данные, которые не должны сохраняться как дочерний элемент самого сообщения, потому что он слишком велик.Возможно, вы не только имя автора, но и более подробную информацию, как возраст, дата регистрации, ...
Тогда пользователь может выглядеть следующим образом:
{name: Aufziehvogel,
age: 21,
registration: 2012-06-19,
interests: [php, nosql, data-mining, foreign-languages]
}
Вы не хотите прикрепить эти данные для каждого сообщения в блоге, потому что некоторые из них могут измениться и потому что они очень большие. Вместо этого вы (как и с реляционными dbs) храните ссылку на пользователя в своих пост-данных. Затем вам придется объединить авторов и сообщения в блогах, как указано в приведенной выше презентации (стр. 40-42). Это объединит требуемого автора с сообщением в блоге.
Что вы могли бы сделать, это сохранить имя автора и идентификатор там, чтобы иметь возможность отображать имя и генерировать HTML-ссылку без необходимости захватывать «настоящего» автора из базы данных.
Пользователи
Что Zuelke также показывает, что как для документа ориентированных д.б.н. это задача приложения, чтобы проверить, является ли хорошо сформированные данные. В MySQL многие задачи могут выполняться базой данных (столбцы, тип данных, длина, ключи UNIQUE), но при использовании документированных dbs вы должны делать это самостоятельно в приложении (за исключением того, что я думаю, что MongoDB имеет такие вещи, как уникальные ключи).
Это также создает хорошую структуру кода, так что вам не нужно беспокоиться о формате данных на слишком многих местах.
Я думаю, там можно было бы сказать еще больше, но я надеюсь, что это первый старт.