Реалистичный предел (размера некоторой базы данных Sqlite) такой же, как реалистичный предел для файла данных. И этот предел зависит от вашего компьютера и системы. На моем текущем рабочем столе Linux я не могу позволить себе намного больший, чем 350-гигабайтный файл (потому что, как правило, я избегаю, чтобы один единственный файл занимал более половины раздела диска). Кстати, этот практический предел также влияет на другие СУБД SQL, такие как PostGreSQL или MariaDB (но большинство из них хранят данные в нескольких файлах, которые вы можете хранить в разных файловых системах, а некоторые из них могут управлять распределенными данными на удаленных машинах. .)
После прочтения этой статьи я все еще не убежден, что когда-либо буду рассматривать SQLite для всего, что может потребовать сотен гигабайт.
Вы правы и неправы.
Вы правы, потому что на современном компьютере (ноутбуки и настольные компьютеры, а не суперкомпьютеры или серверы центров обработки данных) сотня гигабайт по-прежнему является довольно большим дисковым пространством. Таким образом, на практике, если вы думаете о такой большой базе данных, вам лучше представить себе настоящий SQL-сервер (например, PostGreSQL), потому что вам может понадобиться удаленный доступ, эффективный параллельный доступ и, вероятно, распределенные данные и таблицы.
Вы (в принципе, я никогда не пытался) ошибаться, потому что весьма вероятно, что SQLite способен (и иногда тестируется) работать с базой данных объемом в несколько сотен гигабайт, предполагая, что у вас есть файловая система, способная работать с таким большим файлом (и, вероятно, двумя их по крайней мере).
Я бы, конечно, иногда рассматривал SQLite для баз данных объемом в несколько десятков гигабайт (и я однажды попробовал такой большой .sqlite
файл, IIRC размером 40 Гбайт). На нынешних (не суперкомпьютерных) машинах я бы не хотел иметь много сотен гигабайт базы данных SQLite, просто потому что такой файл довольно большой по сегодняшней практике.
IIRC, какой-то производитель оборудования, продающий специализированные файловые системы, говорил мне когда-то о терабайтном sqlite-приложении (но я могу ошибаться).
Конечно , производительность SQLite зависит (как и все базы данных SQL) много числа и ширины таблиц, их индексов, запросов SQL участвующих. И вы не хотите иметь одновременный доступ (многими различными процессами), и вы должны использовать транзакцию (по опыту, даже для крошечной базы данных SQLITE размером в несколько мегабайт, вы действительно хотите обернуть свои, например, тысячу запросов на вставку с помощью BEGIN TRANSACTION
& END TRANSACTION
отсутствие этого замедляет Sqlite в большей степени (более чем в 10 раз).
И по собственному опыту, с подходящей конфигурацией и организацией, SQLite может управлять базой данных, превышающей доступную оперативную память (поэтому 30 Гбайт не проблема), но вы, вероятно, хотите, чтобы индексы помещались в ОЗУ!
Если вам придётся что-то кодировать для «суперкомпьютера» или дорогостоящей рабочей станции (например, с 512 ГБ ОЗУ и 8 ТБ диска и 512 ГБ SSD), у вас наверняка может быть база данных Sqlite терабайт. Но вы захотите сделать это, возможно, только если один (или очень немногие) процесс (ы) обращаются к этой базе данных. Если у вас есть дюжина процессов, одновременно обращающихся к одной и той же базе данных, лучше установить настоящую СУБД SQL (как MariaDB или PostGreSQL)
Также обратите внимание, что хотя (двоичный) формат .sqlite
файлов баз данных задокументирован как «переносимый», я предпочитаю создавать резервные копии баз данных в текстовом формате SQL (используя sqlite3 mydb.sqlite .dump > mydb.sql
). Затем мне также нужно дополнительное дисковое пространство для этого текстового дампа (и это снижает реалистичный предел).
Обычно Sqlite не является узким местом. Но диск может быть.
PS. Те же рассуждения могут быть применены к большим индексированным файлам с использованием GDBM .
PPS. В моей ветке expjs ( сентябрь 2016 ) моего монитора MELT (свободное программное обеспечение GPLv3, на github) я сохраняю всю кучу приложений в JSON внутри свежей базы данных Sqlite. Я провел крошечные эксперименты с несколькими миллионами объектов (довольно «больших») без неприятных сюрпризов. YMMV.