Помимо сценария google/bigtable, когда вы не должны использовать реляционную базу данных? Почему нет, и что вы должны использовать? (вы узнали "трудный путь"?)
Когда вы не должны использовать реляционную базу данных?
Ответ 1
По моему опыту, вы не должны использовать реляционную базу данных, если любой из этих критериев истинен:
- ваши данные структурированы как иерархия или график (сеть) произвольной глубины,
- типичный шаблон доступа подчеркивает чтение по записи или
- Не требуется специальных запросов.
Глубокие иерархии и графики не хорошо переводятся в реляционные таблицы. Даже с помощью проприетарных расширений, таких как Oracle CONNECT BY
, преследование деревьев - это сильная боль при использовании SQL.
Реляционные базы данных добавляют много накладных расходов для простого доступа к чтению. Транзакционная и ссылочная целостность являются мощными, но избыточными для некоторых приложений. Таким образом, для приложений, использующих чтение, в основном, метафора файла достаточно хороша.
Наконец, вам просто не нужна реляционная база данных с полноразмерным языком запросов, если ожидаемых неожиданных запросов не предвидится. Если нет претензий, задающих такие вопросы, как "сколько 5% -дисконтированных синих виджетах мы продавали на восточном побережье, сгруппированных продавцом?", И их никогда не будет, тогда вы, сэр, можете жить без БД.
Ответ 2
Парадигма реляционной базы данных делает некоторые предположения об использовании данных.
- Отношение состоит из неупорядоченного набора строк.
- Все строки в отношении имеют одинаковый набор столбцов.
- Каждый столбец имеет фиксированное имя и тип данных и семантическое значение для всех строк.
- Строки в отношении идентифицируются по уникальным значениям в столбцах первичного ключа.
- и др.
Эти предположения поддерживают простоту и структуру за счет некоторой гибкости. Не все задачи управления данными вписываются в такую структуру. Объекты со сложными атрибутами или переменными атрибутами, например, не выполняются. Если вам нужна гибкость в тех областях, где решение реляционной базы данных не поддерживает его, вам нужно использовать другое решение.
Существуют и другие решения для управления данными с различными требованиями. Например, технология Semantic Web позволяет каждому объекту определять свои собственные атрибуты и быть самоописанием, обрабатывая метаданные как атрибуты так же, как данные. Это более гибко, чем структура, навязанная реляционной базой данных, но эта гибкость приносит свои затраты.
В целом, вы должны использовать правильный инструмент для каждого задания.
См. также мой другой ответ на Базы данных следующего поколения.
Ответ 3
Я предлагаю вам посетить блог High Scalability, который обсуждает эту тему практически ежедневно и содержит много статей о проектах, которые выбрали распределенные хэши и т.д. по RDMBS.
Быстрый (но очень неполный ответ) заключается в том, что не все данные хорошо переносятся в таблицы эффективными способами. Например, если ваши данные по существу являются одним большим словарем, вероятно, есть намного более быстрые альтернативы, которые являются обычными старыми РСУБД. Сказав это, это, в основном, вопрос производительности, и если производительность не вызывает большого беспокойства в проекте, и, например, стабильность, согласованность и надежность, то я не вижу большого смысла в освоении этих технологий, когда RDBMS - это гораздо более зрелая и хорошо разработанная схема с поддержкой на всех языках и платформах и огромным набором решений на выбор.
Ответ 4
Существуют три основные модели данных (C.J.Date, E.F.Codd), и я добавляю к этому плоский файл:
- плоский файл (структура варьируется - от "глупого" плоского текста до файлов, соответствующих грамматикам, которые в сочетании с умными инструментами делают очень умные вещи, думают о компиляторах и что они могут делать, узкое приложение при моделировании новых вещей)
- hierarchical (деревья, вложенные наборы - примеры: xml и другие языки разметки, реестр, организационные диаграммы и т.д., все может быть смоделировано, но правила целостности нелегко выразить, а поиск трудно оптимизировать автоматически, некоторые из них быстро, а некоторые очень медленные).
- network (сети, графики - примеры: навигационные базы данных, гиперссылки, семантическая сеть, снова почти все может быть смоделировано, но автоматическая оптимизация поиск является проблемой)
- relational (логика предиката первого порядка - пример: реляционные базы данных, автоматическая оптимизация поиска)
Иерархическая и сеть могут быть представлены в реляционной и реляционной могут быть выражены в двух других.
Причиной того, что реляционная считается "лучше", является декларативный характер и стандартизация не только на языке поиска данных, но и на языке определения данных, включая сильную декларативную целостность данных, подкрепленную стабильная, масштабируемая многопользовательская система управления.
Преимущества приходятся на стоимость, которую большинство проектов считают хорошим соотношением для систем (многопроцессорное приложение), которые хранят долгосрочные данные в a, которые будут использоваться в обозримом будущем.
Если вы не создаете систему, а одно приложение, возможно, для одного пользователя, и вы совершенно уверены, что не захотите использовать несколько приложений, использующих ваши данные, и несколько пользователей, в ближайшее время вы, вероятно, найти более быстрые подходы.
Кроме того, если вы не знаете, какие данные вы хотите сохранить и как смоделировать, то сильные стороны реляционной модели будут потрачены впустую.
Или, если вы просто не заботитесь о целостности своих данных, что (что может быть хорошо).
Все структуры данных оптимизированы для определенного вида использования, только реляционные, если они правильно смоделированы, пытаются представить "реальность" семантически несмещенным образом. Люди, которые имели плохой опыт работы с реляционными базами данных, обычно не понимают, что их опыт был бы намного хуже с другими типами моделей данных. Ужасные реализации возможны, и особенно в реляционных базах данных, где относительно легко создавать сложные модели, вы можете оказаться с большим монстром на руках. Тем не менее, я всегда чувствую себя лучше, когда пытаюсь представить одного и того же монстра в xml.
Одним из примеров того, насколько хорошей реляционной моделью является ИМО, является отношение сложности к непродолжительности вопросов, которые вы найдете, которые включают SQL.
Ответ 5
Пятнадцать лет назад я работал над системой кредитных рисков (в основном, большой системой ходьбы по дереву). Мы использовали Sybase на HPUX и Solaris, и наша команда убивала нас. Мы наняли консультантов из Sybase, которые сказали, что это невозможно. Затем мы переключились на базу данных OO (хранилище объектов в этом случае) и получили увеличение производительности на 100 раз (и код был примерно на 100x проще для записи)
Но такие ситуации встречаются довольно редко - реляционная база данных является хорошим первым выбором.
Ответ 6
Когда схема сильно варьируется, вам будет трудно работать с реляционными базами данных. Здесь лучше всего работают базы данных XML или базы данных пары "ключ-значение". или вы можете использовать IBM DB2 и иметь как реляционные данные, так и данные XML, управляемые одним движком базы данных.
Ответ 7
Около 7-8 лет назад я работал на веб-сайте, который рос в популярности, помимо наших первоначальных ожиданий, и это привело нас к трудностям с точки зрения производительности. Поскольку мы все были относительно неопытны в веб-проектах, это создавало для нас серьезное напряжение, что делать за пределами обычного разделения баз данных на отдельный сервер, балансировку нагрузки и т.д.
Однажды я подумал о чем-то довольно простом. Поскольку сайт был основан на пользователях, их профили были сохранены в таблице базы данных обычным способом, чтобы кто-то это сделал - идентификатор пользователя, множество информационных переменных и тому подобное - которые отображались бы как страница профиля пользователя, которую могли бы искать другие пользователи, Я сбросил все эти данные в простой html файл, уже подготовленный как страница профиля пользователя, и получил значительное повышение - в основном кеш. Я даже создал систему, когда пользователь редактировал свою информацию о профиле, он разбирал бы оригинальный html файл, помещал его для редактирования, а затем выворачивал html обратно в файловую систему - получал еще больший импульс.
Я сделал что-то похожее на сообщения, отправленные друг другу. В основном везде, где я мог бы сделать систему обойти базу данных вообще, избегая INSERT или UPDATE, я получил значительный импульс. Это может показаться здравым смыслом, но это был просветительный момент. Это не исключает реляционную настройку как таковую, но это вообще исключает базу данных - KISS.