Отказ от ответственности: по ссылочным данным я не имею в виду ссылочную целостность
Я изучаю nosql и хочу понять, как должны моделироваться данные. Например, в типичной реляционной базе данных для приложения CMS у вас могут быть две таблицы: статья и автор, где статья содержит ссылку на автора.
В системе nosql вы можете создать документ статьи таким образом, поскольку это просто замаскированный графический объект
{
title: "Learn nosql in 5 minutes",
slug: "nosql_is_easy",
author: {firstName: "Smarty"
lastName: "Pants"
}
{
title: "Death to RDBMS",
slug: "rdbms_sucks",
author: {firstName: "Smarty"
lastName: "Pants"
}
и т.д.
Скажите, что однажды мистер Смарти Пэнс решил изменить свое имя на Регулярного Джо, потому что nosql стал вездесущим. В случае такого использования каждая статья должна быть отсканирована и обновлено имя автора.
Итак, мои вопросы: каким образом данные должны быть смоделированы в nosql для соответствия основным примерам использования для CMS, чтобы производительность была на уровне или быстрее, чем RDBMS? mongodb, например, претендует на CMS в качестве прецедента...
Edit
Мало кто уже предлагает нормализовать данные вроде:
article
{
title: "Death to RDBMS",
slug: "rdbms_sucks",
author: {id: "10000001"}
}
author
{
name: "Big Brother",
id: "10000001"
}
Однако, поскольку nosql, по дизайну, не имеет объединений, вам придется использовать функции, подобные mapreduce, для объединения данных. Если это ваше предложение, прокомментируйте выполнение такой операции.
Изменить 2:
Если вы считаете, что nosql не подходит для любых данных, требующих ссылочных данных, пожалуйста, также объясните, почему. Это, по-видимому, делает использование для nosql весьма ограниченным, поскольку любое разумное приложение будет содержать реляционные данные.
Изменить 3: