В какой точке стоит использовать базу данных?

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

Мы в нечетной точке, где у нас есть достаточно данных, что было бы выполнимо реализовать базу данных (приблизительно 700 + объекты и растущий) для управления всем, но я не уверен, что это стоит времени прямо сейчас для контакта с. У меня нет проблем при реализации GUI с файлами, сгенерированными от Excel и проанализированными в, но это становится утомительным и твердым отследить даже со сценариями VBA. Я играл вокруг с преобразованием наших данных во что-то более управляемое для стороны приложения с Microsoft Access, и это, кажется, работает хорошо. Если это решает, что я - только шаг (или несколько) далеко от использования базы данных SQL и пользования библиотекой Qt, чтобы получить доступ и изменить его.

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

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


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

52
задан Robert Harvey 1 November 2013 в 09:16
поделиться

13 ответов

База данных имеет смысл, когда:

  1. Ваше приложение эволюционирует до некоторой формы выполнения, управляемого данными.
  2. Вы тратите время на проектирование и разработку структур внешнего хранилища данных .
  3. Обмен данными между приложениями или организациями (включая отдельных людей)
  4. Данные больше не короткие и простые.
  5. Дублирование данных

Эволюция выполнения, управляемого данными
Когда данные изменяются, а выполнение - нет, это признак того, что программа, управляемая данными, или части программы управляются данными. Набор параметров конфигурации является признаком функции, управляемой данными, но все приложение может не управляться данными.В любом случае база данных может помочь в управлении данными. (Библиотека базы данных или приложение не обязательно должны быть огромными, как Oracle, но могут быть скудными и скупыми, как SQLite).

Проектирование и разработка внешних структур данных
Размещение вопросов в Stack Overflow о сериализации или преобразовании деревьев и списков для использования файлов - хороший признак того, что ваша программа перешла на использование базы данных. Кроме того, если вы тратите какое-то количество времени на разработку алгоритмов для хранения данных в файле или разработку данных в файле, это хорошее время для исследования использования базы данных.

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

Сложные данные
Программы начинаются с использования небольших таблиц жестко закодированных данных. Это превращается в использование динамических данных с картами, деревьями и списками. Иногда данные расширяются от простых двух столбцов до 8 и более. Теория баз данных и базы данных могут облегчить сложность организации данных. Позвольте базе данных позаботиться об управлении данными и освободить ваше приложение и время разработки. В конце концов, способ управления данными не так важен, как качество данных и их доступность.

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

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

38
ответ дан 7 November 2019 в 09:32
поделиться

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

  • количество записей
  • размер элементов данных
  • нужно ли использовать базу данных совместно с другими устройствами? Одновременно?
  • насколько сложны отношения между различными частями данных
  • база данных только для чтения (создается во время сборки и не изменяется, например)?
  • нужно ли обновлять базу данных несколькими объектами одновременно?
  • нужна ли вам поддержка сложных запросов?

Для базы данных с 700 записями вполне может подойти отсортированный в памяти массив, загруженный из текстового файла. Но я также мог видеть необходимость во встроенной базе данных SQL или, возможно, в том, что контроллер запрашивает данные из базы данных через сетевое соединение, в зависимости от различных требований (и ограничений ресурсов).

2
ответ дан 7 November 2019 в 09:32
поделиться

Похоже на ваш приложение работает на настольном компьютере и просто обменивается данными со встроенным устройством.

Как таковое использование базы данных гораздо более осуществимо. Использование одного на встроенной платформе - гораздо более сложная проблема.

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

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

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

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

1
ответ дан 7 November 2019 в 09:32
поделиться

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

Мы обнаружили, что у этого метода много проблем:

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

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

iii. Создается несколько копий файлов, и изменения в одной копии не отражаются в другой - нет контроля версий.

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

i. База данных находится на центральном сервере, доступном для ПК во всех тестовых установках.

ii. Все данные попадают во временное расположение (локальный жесткий диск в файлах), как только они создаются. Из файлов он помещается в базу данных процессом, работающим в фоновом режиме (поэтому даже при возникновении сетевой проблемы данные будут присутствовать в локальной файловой системе).

iii. У нас есть веб-приложение, которое позволяет пользователям входить в систему и получать доступ к данным в желаемом формате. Портал позволит им добавлять комментарии, создавать различные отчеты, делиться ими с другими пользователями после просмотра и т. Д.Он также будет иметь возможность экспортировать данные в Excel, на всякий случай, если вам нужно взять его с собой.

Сообщите, можно ли это лучше реализовать.

1
ответ дан 7 November 2019 в 09:32
поделиться

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

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

1
ответ дан 7 November 2019 в 09:32
поделиться

«В какой момент стоит использовать базу данных?»

Если и когда вы есть данные для управления?

-2
ответ дан 7 November 2019 в 09:32
поделиться

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

Используете ли вы базу данных для 700 элементов, во многом будет зависеть от природы данных.

Я бы сказал, что примерно в 90% случаев в этом масштабе вы получите выгоду от облегченной базы данных, такой как SQLite, при условии, что:

  1. Данные могут потенциально значительно вырасти больше, чем то, что вы описываете,
  2. Данные могут совместно использоваться более чем одним пользователем,
  3. Вам может потребоваться выполнить запросы к данным (что я не думаю, что вы сейчас делаете), и
  4. Данные могут легко описывается в виде таблицы.

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

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

Анализаторы XML и средства связывания данных для C ++ легко найти .

8
ответ дан 7 November 2019 в 09:32
поделиться

Причины использования базы данных:

  • Параллельная запись. В базах данных легко добиться параллелизма
  • Простые запросы. SQL-запросы для поиска данных обычно более краткие, чем процедурный код. ОБНОВЛЕНИЯ, INSERT INTO могут также делать множество вещей с очень небольшим кодом
  • Целостность. Ограничения очень легко определить и применяются без написания кода. Если у вас есть ненулевое ограничение, вы можете быть уверены, что значение не будет нулевым, нет необходимости никуда писать чеки. Если у вас есть ограничение внешнего ключа, у вас не будет «болтающихся ссылок».
  • Производительность для больших наборов данных. Индексирование очень просто добавить в базу данных SQL

Причины отказа от использования базы данных:

  • Это, как правило, дополнительная зависимость (хотя существуют очень легкие базы данных - мне нравится, например, H2 для Java)
  • Данные не подходят для реляционной схемы. Вещи, которые по сути являются картами "ключ-значение". XML (хотя базы данных часто поддерживают XPath и т. Д.).
  • Иногда файлы удобнее. Их можно различать, объединять, редактировать с помощью текстового редактора и т. Д. Иногда электронные таблицы могут быть более практичными (вам не нужно создавать редактор - вы можете использовать программу для работы с электронными таблицами)
  • Ваши данные уже где-то иначе
3
ответ дан 7 November 2019 в 09:32
поделиться

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

  • Растет ли объем данных, которые использует / создает приложение?
  • Неизвестен (или неясен) верхний предел этого роста данных?
  • Будет ли приложение агрегировать или фильтровать эти данные?
  • Могут ли в будущем использоваться данные, которые могут быть неочевидными прямо сейчас?
  • Важна ли производительность извлечения и / или хранения данных?
  • Есть (или могут быть) несколько пользователей приложения кто делится данными?

Если я отвечаю «Да» на большинство этих вопросов, я почти всегда выбираю базу данных (в отличие от других вариантов, таких как XML / ini / CSV / Excel / текстовые файлы или файловая система).

Кроме того, если в приложении будет много пользователей, которые могут одновременно обращаться к данным, я склоняюсь к полноценному серверу базы данных (MySQL, SQl Server, Oracle и т. Д.).

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

2
ответ дан 7 November 2019 в 09:32
поделиться

Я вижу довольно много требований, которым хорошо удовлетворяют базы данных:

1). Специальные запросы. Найдите мне все {X}, которые соответствуют критерию Y

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

3). Большие объемы данных. Профессиональные базы данных очень хороши в использовании ресурсов, умных оптимизаций запросов и стратегий разбиения на страницы. Попытка написать это самостоятельно - настоящая проблема.

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

2
ответ дан 7 November 2019 в 09:32
поделиться

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

  1. Уменьшение избыточности данных
  2. Повышенная целостность данных
  3. Повышенная безопасность данных

И последнее, но не менее важное: использование базы данных спасет вас из Excel импорт / обновление / экспорт Ад !

4
ответ дан 7 November 2019 в 09:32
поделиться

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

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

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

2
ответ дан 7 November 2019 в 09:32
поделиться

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

1
ответ дан 7 November 2019 в 09:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: