Имеет ли смысл использовать сервер базы данных, если приложение работает только локально?

41

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

Примером приложения является Amarok (популярный музыкальный проигрыватель в Linux). Я не знаю, делают ли они это до сих пор, но я помню, что было время, когда установка Amarok означала, что вы должны были установить сервер MySQL и постоянно запускать его в фоновом режиме.

В чем преимущество использования сервера для локального хранилища по сравнению с использованием меньшего встроенного SQL-решения, такого как sqlite? Я говорю о прикладном программном обеспечении вообще, не обязательно amarok (это был только пример). Есть ли ситуации, когда использование сервера базы данных имеет смысл по сравнению со встроенной базой данных?

9a3eedi
источник
4
Наличие базы данных может быть очень важным. Наличие внутрипроцессной базы данных или отдельной базы данных процесса является выбором / деталью реализации.
9000
2
Я это понимаю. Вопрос в том, почему вы выбираете отдельную базу данных процесса (например, сервер MySQL) вместо базы данных в процессе (например, SQLite) для локальных приложений.
9a3eedi

Ответы:

29

SQLite предлагает довольно хорошее краткое изложение того, когда использовать его или нет против альтернатив:

https://www.sqlite.org/whentouse.html

Эта итоговая строка очень хорошо отражает сценарий использования SQLite:

SQLite не конкурирует с базами данных клиент / сервер. SQLite конкурирует с fopen ().

Статья подробно раскрывается по этому вопросу. Он также имеет раздел под названием «Ситуации, когда СУБД клиент / сервер может работать лучше». В двух словах, это:

  • Клиент-серверные приложения : несколько пользователей по сети.
  • Сайты с большими объемами : либо интенсивно пишите, либо читайте достаточно интенсивно, чтобы требовать шардинга.
  • Очень большие наборы данных : больше, чем можно разумно хранить на одном диске.
  • Высокий параллелизм : в частности, параллельные записи.
Дени де Бернарди
источник
@ 9a3eedi: на самом деле, среди этих четырех пунктов нет ни одного, который описывает сценарий с полным сервером баз данных в сочетании с локальным хранилищем (особенно первые два - полная противоположность этому) - так что не могли бы вы рассказать нам, почему вы выбрали это ответьте, хотя это не соответствует вашему первоначальному вопросу? Кстати, я дал этому ответу отрицательный ответ именно по этой причине.
Док Браун
@DocBrown: Конкретные случаи, когда вы должны использовать клиент-серверную СУБД: [см. Ответ]; для всего остального SQLite работает нормально. Я не уверен, что там неясно, поэтому смело редактируйте ответ, если считаете, что он необходим.
Дени де Бернарди
Первоначальный вопрос был о конкретных случаях, когда база данных ac / s имеет смысл, если приложение работает только локально (приведено в заголовке) или использует сервер для локального хранения (приведено в тексте вопроса). Четыре вышеописанных сценария являются либо полной противоположностью этому (первые два), либо очень маловероятными или необычными как «локальные» сценарии (вторые два). Так что то, что вы написали, не так, но это не подходит к вопросу.
Док Браун
@DocBrown - и короткий ответ: это не имеет никакого смысла, если вы не имеете дело с негабаритными наборами данных или не нуждаетесь в одновременной записи. (Или, по понятным причинам, нуждающимся в том, что SQLite не предлагает.) Опять же, не стесняйтесь редактировать ответ, если этот момент вам неясен.
Дени де Бернарди
Что ж, если вы действительно думаете, что этот список полон (и поэтому дайте скрытое утверждение, что для локального сценария использование сервера БД C / S не имеет никакого смысла), то я не согласен и не думаю, что могу улучшить Ваш ответ, добавив некоторые разъяснения.
Док Браун
28

Даже для одной системы с одним пользователем «реальный» сервер базы данных имеет смысл:

  1. Он использует знакомый язык ( SQL ). SQLite действительно использует SQL, но некоторые встроенные базы данных (например, объектная база данных , NoSQL ) не используют SQL. Те, как правило, имеют более высокую кривую обучения, потому что они менее распространены.
  2. Он обеспечивает ссылочную целостность, ограничения, триггеры и т. Д., Которые такие продукты, как SQLite, могут не предоставлять или, по крайней мере, предоставлять не в полном объеме.
  3. Ориентируясь на настоящую многопользовательскую, ACID- совместимую сетевую базу данных, приложение может работать в сценарии с одним пользователем / одной рабочей станцией или в качестве многопользовательского размещенного приложения, использующего ту же кодовую базу .
  4. Пользователь имеет возможность просматривать данные в автономном режиме с помощью стандартных инструментов (например, SQL Developer, MySQL Workbench, SQL Server Management Studio), загружать или резервировать данные с помощью этих инструментов и т. Д. Хотя это можно сделать со многими встроенными базами данных различных типы, люди могут быть более знакомы с этими инструментами из мира баз данных C / S.

Основным недостатком является необходимость установки и обслуживания программного обеспечения сервера базы данных, что немного сложно для нетехнических пользователей (и даже многих технических пользователей). Операционные системы, такие как Linux, делают это проще: у меня в системе Linux работают PostgreSQL и MySQL. Я установил приложения, которые подключились к ним практически без взаимодействия с моей стороны.

Док Браун
источник
9
На самом деле существует одна система баз данных (а именно Sybase SQL Anywhere) с полной поддержкой SQL, ссылочной целостностью, ACID, хранимыми процедурами, которая не требует установки сервера или установки в качестве службы при запуске в локальной конфигурации (хотя это может быть настройка для многопользовательской среды). Я не знаю какой-либо другой системы баз данных с этими свойствами, если кто-то ее знает, мне было бы интересно.
Док Браун
3
@DocBrown IIRC MS SQLServer Compact дает вам это в виде DLL, хотя LocalDB, вероятно, является лучшим выбором - он не требует установки как службы, хотя требует прав администратора.
gbjbaanb
5
Чтобы добавить к обсуждению правильности недостатка - помимо SQLite, о котором любопытно уже упоминалось в ответе, ряд не баз данных SQL и систем, подобных базам данных, например, OrientDB, Solr и других, имеют специальную поддержку встраивания .
Миколак
14
SQLite обеспечивает ссылочную целостность (хотя она должна быть включена) и основные ограничения. Это также значительно быстрее, чем большинство серверов при правильном использовании. Его основной недостаток по сравнению с сервером заключается в том, что он работает с одним автором.
Ян Худек
2
@DocBrown: встроенная база данных Firebird обеспечивает полную поддержку SQL, включая ссылочную целостность, гарантии ACID, хранимые процессы и триггеры. Раньше он не поддерживал несколько одновременных подключений к встроенной базе данных, и я не уверен, что это ограничение по-прежнему действует или нет, но существует весь набор функций SQL.
Мейсон Уилер
21

Я думаю, что это связано с инерцией.

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

Предстоящая и набирающая популярность хорошая локальная встроенная база данных, такая как SQLlite, появилась сравнительно недавно.

Питер Б
источник
Из того, что я помню, AmaroK 1 (который мог быть основан на XMMS) не зависел от сервера базы данных. Это был Amarok 2, который был выпущен с KDE4, который представил зависимость, и в то время я обнаружил, что очень странно, что мне потребуется установить MySQL и поддерживать его в фоновом режиме
9a3eedi
10

Наиболее важной отличительной чертой является параллелизм .

Если у вас есть только одно приложение, которое выполняется в одном экземпляре для пользователя, встроенное решение (будь то sqlite или хранилище некоторых объектов) обычно в порядке.

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

Ян Худек
источник
5

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

Если вы чувствуете, что ваше приложение может превратиться в приложение клиент / сервер, вы можете начать с использования СУБД с самого начала, а не портировать его позже.

Я понятия не имею, использует ли данный пример преимущества этого или нет.

JeffO
источник
2

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

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

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

коши
источник
Если бы я развернул приложение для обычных пользователей (скажем, музыкального плеера, такого как AmaroK), я бы подумал, что установить на них сервер MySQL и запустить его в фоновом режиме - это слишком много системного требования, и пользователи это сделают не как. Но я думаю, это зависит от приложения. Это в отличие от использования чего-то вроде SQLite.
9a3eedi
2

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

Если вы хотите обеспечить тесно интегрированную базу данных с приложением, которое не требует доступа из других приложений, создайте островки встроенной базы данных. В качестве примера можно привести реализацию Mozilla Firefox Web Storage с SQLite.

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

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

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

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

В / р, Умут

Умут Кахраманкаптан
источник