2017-02-17 3 views
0

Я читаю вещи о NoSQL. Я знаю, что это не основано на отношениях, но я не могу понять, как сделать некоторые основные вещи. (И я не нашел реального кода примера об этом).Пример планов NoSQL

Я хочу хранить пользователей, сообщения и комментарии.

SQL Версия:

user's table: user_id, username 
posts's table: post_id, user_id, content 
comments's table: comment_id, content 

Ok, просто.

В NoSQL, что я подготовил это (100% функциональный, я не использую любые технологии, такие как MongoDB и т.д. в настоящее время):

users: 
{ 
    id: XX, 
    username: "John" 
}, 
{ 
     id: OO, 
     username: "Mike" 
} 

posts: 
{ 
    id: YY, 
    content: "How are you all ?", 
    user: { 
     id: OO, 
     username: "Mike" 
    }, 
    comments: { 
     id: ZZ, 
     content: "Fine", 
     user: { 
      id: XX, 
      username: "John" 
     } 
    } 
} 

Я мог бы хранить идентификатор пользователя в постах и ​​комментариях на месте всего пользователя, но я использую NoSQL, а не SQL, поэтому я этого не делаю.

Во-первых? Является ли эта модель данных прекрасной для NoSQL?

Во-вторых, если да для предыдущего вопроса, что, если пользователь XX (Джон) изменит свое имя пользователя для «Тони»? Потенциально мне придется обновлять все сообщения от него, и то же самое для каждого комментария?! Представим себе, что он опубликовал в течение своей жизни пользователя, 10 000+ комментариев, wtf. Поэтому я предполагаю, что я делаю это неправильно.

Можете ли вы прояснить мои заблуждения?

+0

Вы понимаете, что NoSQL просто означает «не SQL», правильно? Нет стандартизованного синтаксиса NoSQL, поэтому все зависит от используемой вами базы данных. То, что вы публикуете, - это нечто похожее на объект JavaScript. –

+0

Хранилища данных NoSQL (Cassandra и т. Д.) Обычно являются магазинами с ключевыми значениями. Таким образом, в вашем случае, возможно, ключ будет идентификатором пользователя, а затем да, вам нужно будет найти способ справиться с блоком JSON, на который он указывает. –

ответ

0

Проблема заключается в том, что предполагается, что все базы данных NoSQL работают одинаково, в зависимости от проблемы, похоже, ваш вопрос может быть связан с тем, как хранить «документы» (JSON) в базе данных таким образом что вы можете получить содержимое позже, я отвечу на это с точки зрения документов:

Как вы уже заметили, NoSQL не обеспечивает отношений, и поэтому вам придется обрабатывать это вручную. В NoSQL World де-нормализация - это, как правило, первый шаг к тому, чтобы вы могли получать документы в менее округлых поездках в базу данных, поэтому ваш подход добавления имени пользователя к сообщениям является типичным подходом.

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

Для выполнения отношений вы можете получить документы с идентификатором позже, и при необходимости сохраните идентификаторы, чтобы нормализовать базу данных так же, как в SQL-мире, в этом случае вам может потребоваться использовать индексы для обеспечить хорошую производительность, если идентификатор является пользователем, а не внутренним идентификатором документа, или используйте имя пользователя как идентификатор самого документа. В djondb будет что-то вроде:

{ 
    "_id": "myuser", 
    "name": "Cross" 
} 

и блог будет иметь

{ 
    "userid": "myuser", 
    "content": "Hello world" 
} 

Теперь, если вам нужно обновить несколько документов?В этом случае вам потребуется djondb, база данных документов поддержки операций по нескольким документам, чтобы сохранить свою базу данных в соответствии

Подробнее о моделировании данных: http://djondb.com/nosql-masterdetail-sample/

Подробнее об операциях в djondb: http://djondb.com/section/transactions/

Отказ от ответственности: Я работаю с djondb, поэтому я всегда предвзятый!

Надеюсь, это поможет,

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