SQlite3 Оптимизация: Сохранить внешнее имя файла в БД? Или просто есть огромное количество рядов? - PullRequest
0 голосов
/ 24 мая 2011

Я новичок без опыта работы с компьютерами. Поэтому, пожалуйста, прости меня за глупости, которые я могу сказать. Я работаю над проектом по мониторингу солнечной энергии, чтобы контролировать выходную мощность солнечных энергетических систем, которые устанавливает моя компания. Я пишу клиент, который будет запрашивать у инвертора (на выходную мощность, выходное напряжение, выходной ток, системные ошибки / неисправности и т. Д., Что составляет одно «чтение») каждого из наших клиентов мониторинга каждые 15 минут, пока они иметь свою систему - что означает примерно 35 тыс. показаний в год на одного клиента. Поэтому я думал об организации базы данных sqlite3 одним из следующих двух способов.

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

OR

(2) Сохраните все показания в файле CSV (один файл CSV на клиента) и сохраните имя файла CSV в моей таблице с обычной информацией о клиенте

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

Ответы [ 3 ]

0 голосов
/ 24 мая 2011

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

Что касается эффективности, вам придется проверить это. Не существует единого жесткого быстрого правила, которое гласит «использовать эту базу данных» или «использовать эту базу данных». Это ВСЕГДА "зависит от сценария". SQLite может быть идеальным для вас в этом случае, но бесполезен для кого-то с немного другой рабочей нагрузкой.

0 голосов
/ 24 мая 2011

Я бы выбрал вариант 1, но вместо SQLite использовал бы сервер базы данных, такой как PostgreSQL.

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

Вы можете легко иметь миллионы строк без каких-либо проблем.

0 голосов
/ 24 мая 2011

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

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

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

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