2012-06-19 4 views
0

Я планирую написать приложение в стиле блога, задаваясь вопросом, что я должен использовать для хранения.Решение NoSql для данных блога

Я намерен пойти с решением NoSql, потому что выполнение db-схемы скучно. и я считаю, что могу использовать большую часть функциональности с помощью json-структурированных данных.

Каковы были бы некоторые соображения при проектировании этого? Какая технология NoSql подходит для этой цели?

Грубо выглядящий mongo/couchdb будет делать, я надеюсь получить некоторый опыт на основе рекомендаций.

Цените свою помощь!

ответ

1

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 имеет такие вещи, как уникальные ключи).

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

Я думаю, там можно было бы сказать еще больше, но я надеюсь, что это первый старт.

Смежные вопросы