NoSQL и атомарность / нормализация - PullRequest
2 голосов
/ 14 сентября 2011

У меня есть опыт работы с реляционными базами данных, где атомарность и нормализация являются фундаментальными принципами.

Применяются ли эти принципы также в среде NoSQL?

Посмотрите на следующие способы представления строки на разных языках (в нотации MongoDB):

{
    'name': 'label_hello',
    'en'  : 'hello world!',
    'de'  : 'hallo welt!',
    'es'  : 'hola mundo!'
}

или

{
    'name'  : 'label_hello',
    'values': {
        'en'  : 'hello world!',
        'de'  : 'hallo welt!',
        'es'  : 'hola mundo!'
    }
}

против. более атомарный вариант:

{
    'name' : 'label_hello',
    'lang' : 'en',
    'value': 'hello world!'
}
{
    'name' : 'label_hello',
    'lang' : 'de',
    'value': 'hallo welt!'
}
{
    'name' : 'label_hello',
    'lang' : 'es',
    'value': 'hola mundo!'
}

Какой из этих проектов будет наиболее оптимальным в мире NoSQL?

Обновление:

Для уточнения моего вопроса:

Я хотел бы знать / понимать такие вещи, как: какой из этих вариантов будет быстрее искать, легче обновлять, увеличивать попадания, которые можно более разумно индексировать?

Ответы [ 3 ]

3 голосов
/ 21 сентября 2011

Второй вариант будет работать быстрее, но первый вариант будет занимать меньше памяти.
И в первом варианте у нас меньше повторов значения «name», поэтому я бы выбрал первый вариант, потому что я не люблю повторы.

1 голос
/ 21 сентября 2011

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

0 голосов
/ 14 сентября 2011

Разве вы не имеете в виду нормализацию, а не атомарность? то, что у вас вверху - это (name,en,de,es), а внизу (name,lang,value) с точки зрения отношений, последнее позволяет добавлять дополнительные языки без добавления столбцов, но в форме документа добавление столбцов подходит, поэтому (name,en,de,es) можно расширить до * 1004. * без проблем, поскольку документы, не имеющие значения fr, не будут иметь никакого значения.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...