Подтвердить что ты не робот

Как перестать думать "реляционно"

На работе мы недавно начали проект с использованием CouchDB (документарно-ориентированной базы данных). Мне было трудно отучить все мои реляционные знания db.

Мне было интересно, как некоторые из вас преодолели это препятствие? Как вы перестали думать реляционно и начать думать документально (я извиняюсь за то, что выдумали это слово).

Любые предложения? Полезные советы?

Изменить: если это имеет значение, мы используем Ruby и CouchPotato для подключения к базе данных.

Отредактируйте 2: SO не помогло мне принять ответ. Я выбрал тот, который помог мне узнать больше всего, я думаю. Однако, я полагаю, нет реального "правильного" ответа.

4b9b3361

Ответ 1

Я думаю, что после изучения нескольких страниц на эту тему все зависит от типов данных, с которыми вы имеете дело.

RDBMSes представляют собой подход сверху вниз, где вы, разработчик базы данных, утверждаете структуру всех данных, которые будут существовать в базе данных. Вы определяете, что у человека есть первое, последнее, среднее имя и домашний адрес и т.д. Вы можете применить это с помощью РСУБД. Если у вас нет столбца для Person HomePlanet, вам не повезет, если у вас есть другая HomePlanet, чем Земля; вам придется добавить столбец на более позднюю дату или данные не могут быть сохранены в СУБД. Большинство программистов так или иначе делают такие предположения в своих приложениях, поэтому это не глупо, а принимать и применять. Определение вещей может быть хорошим. Но если вам нужно записывать дополнительные атрибуты в будущем, вам придется добавить их. Модель отношения предполагает, что ваши атрибуты данных не будут сильно меняться.

База данных типа "облачный", использующая что-то вроде MapReduce, в вашем случае CouchDB, не делайте вышеприведенного предположения и вместо этого смотрите данные снизу вверх. Данные вводятся в документы, которые могут иметь любое количество различных атрибутов. Он предполагает, что ваши данные по самому своему определению разнообразны по типам атрибутов, которые он мог бы иметь. В нем говорится: "Я просто знаю, что у меня есть этот документ в базе данных Person, у которого есть атрибут HomePlanet" Eternium "и FirstName" Lord Nibbler ", но нет LastName". Эта модель подходит для веб-страниц: все веб-страницы являются документом, но фактическое содержимое/теги/ключи документа сильно варьируются, поэтому вы не можете вместить их в жесткую структуру, с которой СУБП может справиться с высокой. Именно поэтому Google считает, что Mapxeduce моделирует роксеры-соксеры, потому что набор данных Google настолько разнообразен, что ему нужно строить для двусмысленности из-за выхода, и из-за массивных наборов данных можно использовать параллельную обработку (которая MapReduce делает тривиальным), Модель документа-базы данных предполагает, что ваши атрибуты данных могут/будут сильно изменяться или быть очень разнообразными с "пробелами" и множеством малонаселенных столбцов, которые можно найти, если данные были сохранены в реляционной базе данных. Хотя вы можете использовать RDBMS для хранения данных, подобных этому, он будет очень уродливым.

Чтобы ответить на ваш вопрос, вы не можете думать "реляционно" вообще, глядя на базу данных, использующую парадигму MapReduce. Потому что на самом деле у него нет принудительного отношения. Это концептуальный горб, который вам нужно будет преодолеть.


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

Ответ 2

Это все о данных. Если у вас есть данные, которые имеют смысл с большей точки зрения, хранилище документов может оказаться непригодным. Типичная система на основе документов - это поисковый сервер, у вас есть огромный набор данных и вы хотите найти конкретный элемент/документ, документ статичен или версией.

В ситуации типа архива документы могут быть буквально документами, которые не меняются и имеют очень гибкие структуры. Не имеет смысла хранить свои метаданные в реляционных базах данных, так как все они очень разные, поэтому очень мало документов могут делиться этими тегами. Системы на основе документов не сохраняют нулевые значения.

Данные, не относящиеся к реляционным/документам, имеют смысл при денормализации. Это не сильно изменится, или вы не заботитесь о согласованности.

Если ваш пример использования подходит для реляционной модели, то, вероятно, не стоит сжимать его в модели документа.

Вот хорошая статья о не реляционных базах данных.

Другой способ думать об этом - документ - это строка. Все, что касается документа, находится в этой строке, и оно относится к этому документу. Строки легко разделяются, поэтому масштабирование проще.

Ответ 3

В CouchDB, например Lotus Notes, вы действительно не должны думать о том, что документ аналогичен строке.

Вместо этого документ является отношением (таблицей).

Каждый документ имеет несколько строк - значения полей:

ValueID(PK)  Document ID(FK)   Field Name        Field Value
========================================================
92834756293  MyDocument        First Name        Richard
92834756294  MyDocument        States Lived In   TX
92834756295  MyDocument        States Lived In   KY

Каждый вид представляет собой запрос кросс-табуляции, который выбирает массивный UNION ALL каждого документа.

Итак, он по-прежнему реляционный, но не в самом интуитивном смысле, а не в том смысле, который имеет самое большое значение: хорошие методы управления данными.

Ответ 4

Документированные базы данных не отвергают концепцию отношений, они просто позволяют приложениям разыгрывать ссылки (CouchDB) или даже иметь прямую поддержку отношений между документами (MongoDB). Что еще более важно, так это то, что DODB не имеют схемы. В хранилищах на основе таблиц это свойство может быть достигнуто со значительными накладными расходами (см. Ответ от richardtallent), но здесь это сделано более эффективно. То, что мы действительно должны изучить при переключении с СУБД на DODB, - это забыть о таблицах и начать думать о данных. То, что овечий симулятор вызывает подход "снизу вверх". Это постоянно развивающаяся схема, а не предопределенная прокрустово кровать. Конечно, это не означает, что схемы должны быть полностью оставлены в любой форме. Ваше приложение должно интерпретировать данные, как-то ограничивать их форму - это можно сделать, организовав документы в коллекции, создав модели с методами проверки, но это уже задание приложения.

Ответ 5

Возможно, вам стоит прочитать это http://books.couchdb.org/relax/getting-started

Я сам это слышал, и это интересно, но не знаю, как реализовать это в приложении реального мира;)

Ответ 6

Одна вещь, которую вы можете попробовать, это получить копию firefox и firebug, а также сыграть с картой и уменьшить функции в javascript. они на самом деле довольно классные и веселые, и, судя по всему, они лежат в основе того, как сделать вещи в CouchDB

здесь Джоэл небольшая статья по теме: http://www.joelonsoftware.com/items/2006/08/01.html