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

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

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
139
0
20 779
21
Перейти к ответу Данный вопрос помечен как решенный

Ответы 21

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

Доброго времени суток,

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

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

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

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

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

HTH.

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

Роб

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

kaybenleroll 29.09.2008 00:04
Ответ принят как подходящий

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

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

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

  • То же, что и выше, но с немного большей возможностью проверки структуры.

Таблица / файл CSV

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

Subversion (или аналогичная дисковая система контроля версий)

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

Berkeley DB (по сути, хеш-таблица на диске)

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

Простая БД Amazon

  • Во многом похоже на Berkeley DB, но на хостинге

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

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

CouchDB

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

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

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

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

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

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

Было бы здорово, если бы вы также объяснили недостатки каждого варианта, иначе как следует выбирать? Спасибо,

Sklivvz 28.09.2008 14:31

Кроме того, запись миллионов строк в БД может занять день, в то время как добавление миллиона строк журнала в файл занимает всего несколько минут. Я никогда не пойму, почему люди настаивают на занесении данных журнала в базу данных.

Aaron Digulla 13.12.2008 00:24

Аарон: У меня одна причина: ВЫБРАТЬ сообщения ИЗ журнала WHERE (дата МЕЖДУ 2009-01-01 И 2009-03-01) И type = 'error' AND system = 'windows' :) Как бы вы загрузили это из текстового файла ?

Tomáš Fejfar 18.08.2009 14:07

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

Loren Pechtel 01.03.2010 22:34

Berkeley db определенно имеет транзакции. текстовые файлы и файлы xml / json этого не делают, поэтому многопоточные приложения могут вытеснить их, если вы не будете осторожны. Файлы CSV прекрасно подходят для сбора параметров, потому что бизнес-пользователи могут просто просматривать их и редактировать без дополнительных инструментов. Текстовые файлы отлично подходят для приложений с однократной записью и почти никогда не считываемых, таких как журналирование. Чтобы выбрать подход, вам нужно выяснить, чего вы пытаетесь достичь

O. Jones 12.07.2011 15:38

BDB использовался Subversion и больше не используется из-за огромного количества проблем, с которыми сталкиваются пользователи.

Lee Goddard 10.10.2012 11:05

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

jtb 22.05.2015 13:16

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

Offler 07.10.2015 13:26

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

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

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

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

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

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

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

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

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

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

Мерф

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

  1. Структура: очевидно, что она распадается на части, или вы идете на компромиссы?
  2. Использование: как будут анализироваться / извлекаться / анализироваться данные?
  3. Срок службы: как долго данные полезны?
  4. Размер: сколько там данных?

Одним из особых преимуществ файлов CSV перед СУБД является то, что их можно легко сжать и перенести практически на любую другую машину. Мы передаем большие объемы данных, и все достаточно просто, мы просто используем один большой CSV-файл, и легко создавать сценарии с помощью таких инструментов, как rsync. Чтобы уменьшить повторение в больших файлах CSV, вы можете использовать что-то вроде YAML. Я не уверен, что буду хранить что-либо вроде JSON или XML, если у вас нет серьезных требований к отношениям.

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

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

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

Одна из опасностей CSV-файлов заключается в том, что их нужно избежать; его легко реализовать читатель или писатель CSV, который на самом деле не соответствует спецификации, поскольку он выглядит обманчиво простым и имеет несколько тонкостей: en.wikipedia.org/wiki/Comma-separated_values#Specification

Jared Updike 25.08.2009 03:54

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

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

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

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

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

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

BTrees - это базовая реализация обычных индексов. Oracle поддерживает таблицы с индексированием, которые представляют собой просто таблицу, реализованную как индекс. Их быстрее читать, медленнее писать и использовать B-дерево. См .: oracle.com/technology/products/oracle9i/datasheets/iots/…>

borjab 28.09.2008 14:34

Custom (hand-written) storage engine / Potentially very high performance in required uses cases

http://www.hdfgroup.org/

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

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

HDF supports several different data models, including multidimensional arrays, raster images, and tables.

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

HDF5 is a suite that makes possible the management of extremely large and complex data collections.

Подумайте о петабайтах данных дистанционного зондирования NASA / JPL.

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

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

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

Несколько лет назад был написан RAD-инструмент под названием ДЖЕЙД, который имеет встроенную OODBMS. Более ранние версии движка DB также поддерживали Digitalk Smalltalk. Если вы хотите создать образец приложения с использованием парадигмы, отличной от РСУБД, это может быть началом.

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

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

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

Раньше было правдой, что вам нужен был клиент Smalltalk для использования GemStone / S (для настольных приложений), но с веб-фреймворками Aida (aidaweb.si) и Seaside (Seaside.st) GemStone / S можно использовать непосредственно в качестве сервера приложений. См. Информацию о СТЕКЛЕ (Seaside.gemstone.com)

Dale Henrichs 07.02.2009 23:39

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

Stephan Eggermont 19.04.2011 03:01

Возможности специальных запросов OODBMS намного лучше, чем у СУБД на основе SQL.

Stephan Eggermont 19.04.2011 03:02

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

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

Вы можете привести пример, почему / когда не нужна ACID?

Ivan Voroshilin 05.10.2013 12:00

@vibneiro, если в базе данных есть только один пользователь, который выполняет только последовательные операции, или риск несогласованности базы данных в случае сбоя питания приемлем, или концепция транзакций базы данных не применяется, или нет необходимости в ограничениях, каскадов, триггеров и т.п., тогда может быть достаточно не-КИСЛОТА не-RDBMS-провайдера (например, текстовый файл с API-интерфейсом, подобным RDBMS). Например, ваше приложение может хранить базу данных исторических диагностических сообщений, для которых ACID совершенно неактуален и будет достаточно "log.txt".

bzlm 06.10.2013 23:52

Оказывается, в очень редких случаях КИСЛОТА не нужна. Интересно, почему тогда базы данных NoSQL так популярны? Большинство из них не поддерживают полную КИСЛОТНОСТЬ.

Ivan Voroshilin 08.10.2013 00:20

@vibneiro, NoSQL обычно проще, легче, легче встраивается, удобнее размещать самостоятельно, более интуитивно понятно, более гибко и обычно с немного ACID. Если у вас нет реляционных данных, возможно, вам не нужна СУБД.

bzlm 08.10.2013 00:45

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

Это вежливая версия ... Я чаще слышал: «Будь простым, глупым» ... или, глоток, может быть, это именно то, что мне говорят люди! :-(

GreenMatt 22.09.2010 22:48

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

Потому что:

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

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

Lua - это язык программирования. Это предложение можно обобщить, чтобы предложить любые функции сохранения / сериализации любого языка программирования (например, pickle / shelve в Python или JSON / YAML для Perl и др. И т. Д.). Это вообще не касается одновременного доступа и гарантий ACID.

Jim Dennis 27.01.2010 09:29

Ты прав. Чего не хватало в моей записи, так это подразумеваемого характера такого использования только для чтения. В таком сценарии я придерживаюсь своего текста. Для чтения-записи использование Lua таким образом не имеет абсолютно никакого смысла. Многие вещи, s.a. Метаданные файловой системы в основном доступны только для чтения, поэтому такой подход не означает полного требования ro.

akauppi 27.01.2010 18:18

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

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

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

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

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

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