2016-10-19 5 views
3

Пытается перейти с РСУБД на NOSQL (в частности, MongoDB). Так несколько вещей, которые я получил до сих пор:Обновление денормализованных дублированных данных

1) Денормализация нормально для NoSQL

2) дублирование данных в порядке.

Так я озадачился дублированным обновлением данных ...

Давайте представим, что мы имеем автомобили и лодку. Они имеют общее свойство цвета. Затем мы решили переименовать цвет. Мы не хотим использовать «Красный», вместо этого мы хотим использовать «Ярко-красный».

RDBMS случай: Так, например, в RDBMS у меня будет три таблицы: автомобиль, лодка, цвет. Автомобиль и лодка имеют внешние ключи, связанные с Таблицей цветов. Я обновляю только одну таблицу с одним запросом и получаю согласованные данные.

NOSQL case: У меня есть две коллекции ... Лодки и автомобили. У нас есть цветовое поле для каждого документа. Например. Лодка { цвета: "красный", типа: "быстрые" }

автомобили { цвета: "красный", типа: "медленная" }

Поэтому, когда я хочу, чтобы изменить имя цвета, я должен запустить два запроса (для каждой коллекции) и обновить каждый документ, где color == "red"? Но что, если у меня есть десятки коллекций с дубликатами и может ЗАБЫТЬ один из них? Существует ли какой-либо общий подход/дизайн БД, чтобы избежать/облегчить выполнение таких случаев? Или это один из компромиссов nosql?

ответ

1

1) Денормализация нормально для NoSQL

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

2) Денормализация нормальна для NoSQL

это в основном следствие денормализации, поэтому все равно применима и здесь.

+0

Мне нужно создать действительно большие объекты. Чтобы получить данные, которые я использую от 4 до 7 подключений в своих sql-запросах, их действительно трудно читать и поддерживать. Поэтому я решил объединить данные. Я считаю, что nosql может быть применим для моего приложения. –

+0

Тогда вам нужно жить с вашим решением и обновлять этот объект вручную (он всегда компромисс). Или используйте некоторый инструмент ORM, который построит для вас сложный запрос. – talex

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