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

13

Я делал программу на Python для измерения роста codereview.SE . Мой подход заключался в том, чтобы отобразить «статистику сайта» на первой странице и сохранить их на моем жестком диске. Я планирую делать это один раз в день. Пока что я сделал достаточно, чтобы получить статистику и добавить ее в текстовый файл. Скрипт python можно посмотреть на github . Формат, который я использую, следующий

22-08-2013

questions 9073
answers 15326
answered 88
users 26102
visitors/day 7407

22-08-2013

questions 9073
answers 15326
answered 88
users 26102
visitors/day 7407

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

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

PS: если можно добавить лучшие теги, сделайте это. У меня были некоторые сомнения по поводу тегов, которые можно было бы добавить.

Aseem Bansal
источник
«Каждый инструмент несет ответственность, пока вы не научитесь его использовать».
JeffO
1
База данных может подходить или не подходить для вашего проекта. Однако вы можете обнаружить, что использование более простого формата будет полезным. Существует стандартный CSV-модуль с Python, который вы можете использовать. Наличие CSV упростит экспорт данных в другие программы (например, в электронную таблицу, чтобы вы могли отобразить ее график).
Шон МакSomething

Ответы:

13

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

Википедия говорит нам, что база данных - это организованная коллекция данных . По этой мере ваш текстовый файл является базой данных. Это говорит:

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

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

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

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

Представьте, что вместо одной небольшой записи в день вы решили записывать каждый вопрос, заданный в CodeReview, кто его задавал и когда. Кроме того, вы также собираете все ответы и соответствующие метаданные. Вы можете хранить все это в текстовом файле, но простой файл затруднит поиск информации, когда она вам понадобится. Было бы слишком много данных, чтобы прочитать все это в памяти, поэтому всякий раз, когда вы хотели найти вопрос или ответ, вам приходилось сканировать файл, пока вы не нашли то, что искали. Если вы хотите найти все вопросы, заданные данным пользователем, вам нужно будет просмотреть весь файл. Если вы хотите найти все вопросы, которые имеют «ошибки» в виде тега, вам нужно будет просмотреть файл.

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

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

Калеб
источник
3
«думать о вашем текстовом файле как об изменении базы данных» Очень проницательно. Также была полезна часть обо мне, имеющая только 3650 записей. Это помогло получить реальную перспективу проблемы.
Aseem Bansal
1
Очень недооцененный ответ, это второй раз, когда я возвращаюсь к нему.
Хашим
6

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

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

Килиан Фот
источник
Разве связность не предлагается лучше в соответствии с общим дизайном? например, в моем случае я храню 5 значений, соответствующих каждой дате. В текущем состоянии нет никакой сплоченности между данными.
Aseem Bansal
Вы правы, гарантируя, что все записи имеют согласованный набор полей и значений - еще одно из этих преимуществ. (Строго говоря, это гарантируют только реляционные базы данных. Люди долгое время использовали нереляционные базы данных в производстве, и в настоящее время они снова набирают обороты с движением «NoSQL».)
Килиан Фот,
3

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

jmoreno
источник
«Сколько вещей нужно для чтения / записи», - это помогло.
Aseem Bansal
2

Базы данных используются не только для хранения, но и для манипулирования и запроса данных, поэтому вам придется принять взвешенное решение:

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

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

Если вы хотите поиграть с SQL и его возможностями, SQLFiddle.com предлагает несколько различных моделей RDBMS, с которыми вы можете поиграть (запустить запросы, создать схему и т. Д.).

Charleh
источник
Python имеет встроенный стандартный интерфейс библиотеки для sqlite3. Таким образом, установка базы данных не является проблемой. Я считаю, что если я продолжу хранить данные, то, если у меня не будет какой-либо индексации, это может стать медленным. Думаю, об этом может позаботиться база данных. Я скачал sqlite3 отдельно, чтобы изучить его, обнаружил, что мне нужно узнать о моделях баз данных, прежде чем использовать базу данных, попробовал это. Я могу изучать sqlite3, используя примеры из Интернета, но в настоящее время у меня возникают проблемы с изучением моделей баз данных. Тогда мне пришло в голову, стоило ли это даже хлопот?
Aseem Bansal
2

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

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

По моему опыту, если вы совершенно не знакомы с базами данных, вам может быть проще использовать что-то вроде couchdb: http://couchdb.apache.org/, который не является sql, и вы можете использовать непосредственно javascript или python и т. Д. Для запросов.

Лоренцо Баракки
источник