Веские причины НЕ использовать реляционную базу данных?

StackOverflow https://stackoverflow.com/questions/37823

  •  09-06-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

Обычные текстовые файлы в файловой системе

  • Очень прост в создании и редактировании
  • Пользователям легко манипулировать с помощью простых инструментов (например,текстовые редакторы, grep и т.д.)
  • Эффективное хранение двоичных документов

Файлы XML или JSON на диске

  • Как и выше, но с немного большими возможностями для проверки структуры.

Электронная таблица / CSV-файл

  • Очень простая модель для понимания бизнес-пользователей

Subversion (или аналогичная система управления версиями на базе диска)

  • Очень хорошая поддержка управления версиями данных

База данных Беркли (По сути, хеш-таблица на основе диска)

  • Очень простой концептуально (просто не введенный ключ / значение)
  • Довольно быстро
  • Отсутствие административных накладных расходов
  • Поддерживает транзакции, я полагаю

Простая база данных Amazon

  • Я полагаю, очень похоже на Berkeley DB, но размещено

Хранилище данных Google App Engine

  • Размещенный и высоко масштабируемый
  • Хранилище ключ-значение для каждого документа (т.е.гибкая модель данных)

CouchDB

  • Фокус на документе
  • Простое хранение полуструктурированных данных на основе документов

Коллекции на родном языке (хранятся в памяти или сериализованы на диске)

  • Очень тесная языковая интеграция

Пользовательский (рукописный) механизм хранения данных

  • Потенциально очень высокая производительность в требуемых случаях использования

Я не могу утверждать, что знаю о них что-то особенное, но вы, возможно, также захотите ознакомиться с системы объектных баз данных.

Другие советы

Ответ Мэтта Шеппарда отличный (мод), но я бы учел эти факторы, думая о шпинделе:

<Ол>
  • Структура: она, очевидно, разбивается на части, или вы делаете компромиссы?
  • Использование: как данные будут проанализированы / извлечены / найдены?
  • Срок службы: как долго полезны данные?
  • Размер: сколько там данных?
  • Одно особое преимущество CSV-файлов перед RDBMS заключается в том, что их можно легко уплотнить и перемещать практически на любую другую машину. Мы осуществляем передачу больших объемов данных, и все достаточно просто, мы просто используем один большой файл CSV и легко пишем с помощью таких инструментов, как rsync. Чтобы уменьшить количество повторений в больших файлах CSV, вы можете использовать что-то вроде YAML . Я не уверен, что буду хранить что-либо вроде JSON или XML, если только у вас не будет существенных требований к отношениям.

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

    Например, я начал пытаться анализировать производительность, которая по существу представляла собой все временные числа различных функций, зарегистрированных на 20 машинах. После попытки вставить все в СУБД, я понял, что мне действительно не нужно снова запрашивать данные после их агрегирования. И это полезно только в агрегированном формате для меня. Поэтому я сохраняю файлы журналов, сжимаю их и оставляю агрегированные данные в БД.

    Примечание. Я привык думать о " большом " размеры.

    Файловая система prety удобна для хранения двоичных данных, которые никогда не работают на удивление хорошо в реляционных базах данных.

    Попробуйте Prevayler: http://www.prevayler.org/wiki/ Превайлер является альтернативой СУБД. На сайте есть больше информации.

    Если вам не нужен ACID , вам, вероятно, не нужны служебные данные RDBMS. Итак, сначала определите, нужно ли вам это. Большинство ответов, не относящихся к СУБД, представленных здесь, не предоставляют ACID.

      

    Пользовательский (рукописный) механизм хранения / Потенциально очень высокая производительность в необходимых случаях использования

    http://www.hdfgroup.org/

    Если у вас есть огромные наборы данных, вместо того, чтобы использовать свой собственный, вы можете использовать HDF, иерархический формат данных.

    http://en.wikipedia.org/wiki/Hierarchical_Data_Format :

      

    HDF поддерживает несколько различных моделей данных, включая многомерные массивы, растровые изображения и таблицы.

    Он также иерархичен, как файловая система, но данные хранятся в одном магическом двоичном файле.

      

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

    Вспомните петабайты данных дистанционного зондирования НАСА / JPL.

    Добрый день,

    Один случай, о котором я могу вспомнить, - это когда данные, которые вы моделируете, не могут быть легко представлены в реляционной базе данных.

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

    Я почти во всех этих случаях, OO DB используется либо коммерческий продукт, либо самокатящаяся система, допускающая иерархию объектов.

    Я работал над приложением для мониторинга 3G для крупной компании, которая останется безымянной, но чей логотип представляет собой пятно от красного вина (-:, и они использовали такую OO DB для отслеживания всех различных атрибутов для отдельных ячеек в сети.

    Запрос таких баз данных выполняется с использованием проприетарных методов, которые, как правило, полностью свободны от SQL.

    ХТХ.

    ваше здоровье,

    Роб

    Объектные базы данных не являются реляционными базами данных. Они могут быть очень полезны, если вы просто хотите поместить некоторые объекты в базу данных. Они также поддерживают управление версиями и изменяют классы для объектов, которые уже существуют в базе данных. db4o - первое, что приходит на ум.

    В некоторых случаях (например, данные финансового рынка и управление процессом) вам может потребоваться использовать базу данных в реальном времени, а не СУБД. Смотрите ссылку вики

    Был разработан инструмент RAD под названием JADE , написанный несколько лет назад и имеющий встроенную OODBMS. Более ранние воплощения движка DB также поддерживали Digitalk Smalltalk. Если вы хотите попробовать создать приложение с использованием не-RDBMS-парадигмы, это может быть началом.

    Другие продукты OODBMS включают в себя объективность , GemStone (Вам необходимо получить VisualWorks Smalltalk для запустить версию Smalltalk, но есть и версия Java). В этом пространстве были также некоторые исследовательские проекты с открытым исходным кодом - на ум приходят EXODUS и его потомок SHORE.

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

    OODBMS наиболее подходит для приложений с основными структурами данных, которые лучше всего представлены в виде графа взаимосвязанных узлов. Раньше я говорил, что наиболее существенным приложением OODBMS было многопользовательское подземелье (MUD), где комнаты содержали аватары игроков и другие объекты.

    Вы можете пройти долгий путь, просто используя файлы, хранящиеся в файловой системе. СУБД становятся лучше в обработке больших двоичных объектов, но это может быть естественным способом обработки данных изображений и тому подобного, особенно если запросы просты (перечисление и выбор отдельных элементов.)

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

    Сервисы, такие как Amazon S3 , предоставляют более простые модели хранения (значение ключа >), которые не поддержка SQL. Масштабируемость - вот ключ.

    Файлы Excel также могут быть полезны, особенно если пользователям необходимо иметь возможность манипулировать данными в знакомой среде и создать полноценное приложение, чтобы сделать это невозможно.

    Существует большое количество способов хранения данных - даже "реляционная база данных" охватывает ряд альтернатив: от простой библиотеки кода, которая манипулирует локальным файлом (или файлами) так, как если бы это была реляционная база данных для одного пользователя, через файловые системы, которые могут обрабатывать несколько пользователей, до широкого выбора серьезных "серверных" систем.

    Мы часто используем XML-файлы - вы получаете хорошо структурированные данные, хорошие инструменты для запросов, а также возможность вносить изменения при необходимости, что-то понятное человеку, и тогда вам не нужно беспокоиться о работе движка БД (или о работе движка БД).Это хорошо работает для материалов, которые, по сути, доступны только для чтения (в нашем случае чаще всего генерируются из базы данных в другом месте), а также для однопользовательских систем, где вы можете просто загрузить данные и сохранить их по мере необходимости, но вы создаете возможности для проблем, если вам нужно многопользовательское редактирование - по крайней мере, одного файла.

    Для нас это все - мы либо собираемся использовать что-то, что будет работать с SQL (MS предлагает набор инструментов, которые запускаются из .DLL для выполнения однопользовательских задач вплоть до enterprise server, и все они говорят на одном и том же SQL (с ограничениями в нижней части)), либо мы собираемся использовать XML в качестве формата, потому что (для нас) детализация редко является проблемой.

    В настоящее время нам не нужно манипулировать двоичными данными в наших приложениях, чтобы не возникало такого вопроса.

    Мерф

    Можно рассмотреть возможность использования сервера LDAP вместо традиционной базы данных SQL, если данные приложения в значительной степени ориентированы на ключ / значение и имеют иерархическую природу.

    BTree-файлы часто работают намного быстрее, чем реляционные базы данных. SQLite содержит внутри себя библиотеку BTree, которая находится в общественном достоянии (как в подлинно «общественном достоянии», не употребляя термин свободно).

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

    Полнотекстовые базы данных, к которым можно обращаться с помощью операторов близости, таких как " в пределах 10 слов от " и др.

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

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

    Также:* Встроенные сценарии - когда обычно требуется использовать что-то меньшее, чем полноценная СУБД. Db4o это ODB, который может быть легко использован в таком случае.* Быстрая разработка или проверка концепции - когда вы хотите сосредоточиться на бизнесе и не беспокоиться о постоянстве уровня

    Теорема CAP объясняет это кратко. SQL в основном обеспечивает «строгую согласованность: все клиенты видят одно и то же представление даже при наличии обновлений».

    K.I.S.S: сделай его маленьким и простым

    Я бы предложил RDBMS :) Если у вас нет проблем с настройкой / администрированием, перейдите на SQLite. Встроенная СУБД с полной поддержкой SQL. Он даже позволяет хранить данные любого типа в любом столбце.

    Главное преимущество, например, для файла журнала: если у вас есть огромный файл, как вы собираетесь его искать? С движком SQL вы просто создаете индекс и значительно ускоряете работу.

    О полнотекстовом поиске: в SQLite есть модули для полнотекстового поиска.

    Просто наслаждайтесь хорошим стандартным интерфейсом для ваших данных:)

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

    Hadoop также имеет реализацию файловой системы Google , которая называется Распределенная файловая система Hadoop .

    Я бы настоятельно рекомендовал Lua в качестве альтернативы хранилищу данных типа SQLite.

    Потому что:

    • Изначально этот язык был разработан как язык описания данных
    • Синтаксис удобочитаем для человека (XML является нет)
    • Можно скомпилировать фрагменты Lua в двоичный файл для повышения производительности

    Это вариант "коллекция родного языка" принятого ответа.Если вы используете C / C ++ в качестве прикладного уровня, вполне разумно использовать движок Lua (100 КБ двоичного файла) только ради чтения конфигураций / данных или их записи.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top