Каковы рабочие характеристики sqlite с очень большими файлами базы данных? [закрытый]

Из message: 'Missing Permissions' мы можем сделать вывод, что вашему боту не хватает необходимых разрешений.

Чтобы устранить эту проблему, перейдите на портал разработчиков Discord и получите PERMISSIONS INTEGER, в котором содержатся необходимые вам разрешения. Наиболее распространенным является 8, которое является целым числом для прав администратора.

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

317
задан Deepu 18 October 2013 в 01:07
поделиться

6 ответов

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

Тесты включают в себя один файл sqlite с одной или несколькими таблицами. Каждая таблица имела около 8 столбцов, почти все целые числа и 4 индекса.

Идея заключалась в том, чтобы вставить достаточно данных, пока размер файлов sqlite не достигнет 50 ГБ.

Single Table

Я пытался вставить несколько строк в файл sqlite. только с одним столом. Когда размер файла составлял около 7 ГБ (извините, я не могу точно сказать, сколько строк) вставки занимали слишком много времени. Я подсчитал, что мой тест для вставки всех моих данных займет около 24 часов, но он не завершился даже после 48 часов.

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

Думаю, это неудивительно, поскольку таблица становится больше, вставка и обновление всех индексов занимает больше времени.

Несколько таблиц

Затем я попытался разбить данные по времени на несколько столы, один стол в день. Данные для исходной таблицы 1 были разделены на ~ 700 таблиц.

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

Вакуумные проблемы

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

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

Выводы

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

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

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

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

236
ответ дан 23 November 2019 в 01:02
поделиться

Я создал базы данных SQLite размером до 3,5 ГБ без заметных проблем с производительностью. Если я правильно помню, я думаю, что у SQLite2 могли быть некоторые более низкие пределы, но я не думаю, что у SQLite3 есть такие проблемы.

Согласно странице SQLite Limits , максимальный размер каждой страницы базы данных составляет 32 КБ. А максимальное количество страниц в базе данных составляет 1024 ^ 3. Так что по моей математике получается 32 терабайта как максимальный размер. Я думаю, что вы достигнете пределов своей файловой системы, прежде чем достигнете пределов SQLite!

63
ответ дан 23 November 2019 в 01:02
поделиться

Я думаю, что основные жалобы по поводу масштабирования sqlite:

  1. Однопроцессная запись.
  2. Без зеркального отображения.
  3. Без репликации.
8
ответ дан 23 November 2019 в 01:02
поделиться

У меня возникли проблемы с большими файлами sqlite при использовании команды вакуума.

Я еще не пробовал функцию auto_vacuum. Если вы планируете часто обновлять и удалять данные, на это стоит обратить внимание.

6
ответ дан 23 November 2019 в 01:02
поделиться

There used to be a statement in the SQLite documentation that the practical size limit of a database file was a few dozen GB:s. That was mostly due to the need for SQLite to "allocate a bitmap of dirty pages" whenever you started a transaction. Thus 256 byte of RAM were required for each MB in the database. Inserting into a 50 GB DB-file would require a hefty (2^8)*(2^10)=2^18=256 MB of RAM.

But as of recent versions of SQLite, this is no longer needed. Read more here.

8
ответ дан 23 November 2019 в 01:02
поделиться

Большая часть причины того, что для выполнения вставок потребовалось > 48 часов, заключается в индексах. Невероятно быстрее:

1 - Отбросить все индексы 2 - Выполнить все вставки 3 - Создать индексы снова

51
ответ дан 23 November 2019 в 01:02
поделиться
Другие вопросы по тегам:

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