Що таке реалістичний, реальний, максимальний розмір для бази даних SQLite?


33

Згідно з цією статтею про відповідне використання для SQLite, в ній сказано, що, хоча SQLite обмежена 140 терабайт , RDBMS клієнт / сервер може працювати краще:

База даних SQLite обмежена розміром до 140 терабайт (2 47 байт, 128 тибібайт). І навіть якщо він може працювати з більшими базами даних, SQLite зберігає всю базу даних в одному файлі диска, і багато файлових систем обмежують максимальний розмір файлів чимось меншим, ніж це. Отже, якщо ви розмірковуєте з базами даних такого масштабу, вам було б добре подумати про використання двигуна бази даних клієнт / сервер, який поширює його вміст по декількох дискових файлах і, можливо, по декількох томах.

Взагалі я з цим погоджуюся, але з подивом дізнався, що максимальний ліміт SQLite був настільки високим! На моєму досвіді я використав досить багато баз даних SQL Server розміром ~ 30-100 ГБ. Я також опосередковано працював із значно більшими базами даних за допомогою Oracle, Postgres або Cassandra. З них, принаймні, наскільки мені відомо, жоден не наближався до 140 ТБ. Я не DBA, тому це я б вважав "великим" зі свого прямого досвіду.

Я розглядав SQLite лише для ситуацій, коли база даних була б крихітною; не більше десятків мегабайт.

Прочитавши цю статтю, я все ще не переконаний ніколи вважати SQLite тим, що може вимагати сотні гігабайт. Але мені цікаво, чи я недооцінював її можливості. Що таке реалістичне обмеження максимального розміру для бази даних SQLite в реальному використанні?


3
Я просто думаю, що нам зазвичай доводиться враховувати кількість одночасних з'єднань, оскільки великі набори даних часто вважаються споживаними кількома користувачами. Існує спосіб, щоб ви протестували це у власній системі, чи не так?
JeffO

3
Для чогось схожого на базу даних архівованих транзакцій, до яких майже ніколи не потрібно звертатися, SQLite може бути чудовим вибором, і одночасно буде лише один користувач (якщо такий є), і вам не потрібно мати цілу Налаштування сервера БД для його підтримки. Якщо у вас є кілька одночасних користувачів, з іншого боку, ви можете легко зіткнутися з проблемами з блокуванням, що заважає задовго до того, як ви потрапите навіть до декількох гіг-баз даних.
Майкл Коне


2
@Pacerier - так, для встановлення програмного забезпечення. Тоді вам потрібно призначити ролі БД, з’ясувати, як інтегруватись у систему резервного копіювання, переконайтесь, що система резервного копіювання приводить сервер БД у належний стан на початку та наприкінці резервного копіювання, тощо, тощо. Існує набагато більше налаштування сервера db, ніж просто встановлення програмного забезпечення. Крім того, це ще одна послуга, про яку ви повинні турбуватися з точки зору безпеки мережі, і ще одна річ, про яку потрібно не відставати виправлення. Якщо вам потрібен сервіс db, то обов'язково використовуйте його, але він вам не потрібен, у SQLite набагато менше накладних витрат.
Майкл Коне

1
@ leeand00 - Або ви могли орендувати місце на місяць.
JeffO

Відповіді:


26

Реалістичний ліміт (розміру деякої бази даних Sqlite) такий самий, як і реалістичний межа для файлу даних. І ця межа залежить багато від вашого комп'ютера та системи. На моєму нинішньому робочому столі Linux я не можу дозволити собі значно більший розмір, ніж файл 350 Гбайт (тому що, як правило, я уникаю, щоб один файл з'їв більше половини дискового розділу). До речі, цей практичний ліміт також впливає на інші SQL RDBMS, такі як PostGreSQL або MariaDB (але більшість із них зберігають дані у кількох файлах, які ви можете зберігати в різних файлових системах, а деякі з них здатні керувати розподіленими даними на віддалених машинах .. .)

Прочитавши цю статтю, я все ще не переконаний ніколи вважати SQLite тим, що може вимагати сотні гігабайт

Ви маєте рацію і неправильно.

Ви маєте рацію, адже на сьогоднішньому комп’ютері (ноутбуки та настільні комп’ютери, а не суперкомп'ютери та сервери центрів обробки даних) сто гігабайт все ще є досить великим дисковим простором. Тож на практиці, якщо ви думаєте про таку велику базу даних, вам краще уявити справжній сервер SQL (à la PostGreSQL), зокрема, тому що, можливо, ви хочете дуже ймовірно віддалений доступ, ефективно одночасний доступ і, ймовірно, розподілені дані та таблиці.

Ви (в принципі, я ніколи не намагався) помиляєтеся, тому що, ймовірно, SQLite здатний (а іноді і тестується) мати справу з базою даних в кілька сотень гігабайт, якщо припустити, що у вас є файлова система, здатна працювати з таким великим файлом (і, мабуть, двома з їх принаймні).

Я, звичайно, хотів би (іноді) вважати SQLite для баз даних кількох десятків гігабайт (і я спробував одного разу настільки великий .sqliteфайл, IIRC об'ємом 40 Гбайт). На поточних (не суперкомп'ютерних) машинах я б вагався з наявністю багатьох сотень гігабайт бази даних SQLite, просто тому, що такий файл досить великий за сьогоднішньої практики.

IIRC, якийсь постачальник апаратних засобів, що продає спеціалізовані файлові системи, не раз говорив мені про терабайтний додаток sqlite (але я можу помилятися).

Звичайно, ефективність SQLite залежить (як і всі бази даних SQL) від великої кількості та ширини таблиць, їх індексів, залучених запитів SQL. І ви не хочете мати одночасний доступ (за допомогою багатьох різних процесів), і вам слід скористатися транзакціями (за досвідом, навіть у крихітній базі даних SQLITE, що має кілька мегабайт, ви дійсно хочете обернути свої тисячі запитів на вставку BEGIN TRANSACTION& & END TRANSACTION, не робити це - уповільнює Sqlite великим фактором -більше 10x-).

І за особистим досвідом, з відповідною конфігурацією та організацією, SQLite здатний керувати базою даних, більшою, ніж наявна оперативна пам’ять (тому 30 Гбайт - це не проблема) - але ви, мабуть, хочете, щоб індекси вміщувалися в оперативній пам'яті!

Якщо вам трапляється кодувати щось для «суперкомп'ютера» або дорогої робочої станції (наприклад, 512 Гбайт оперативної пам’яті та 8 Тбайт диска та 512 Гбайт SSD), ви, безсумнівно, можете мати терабайтну базу даних Sqlite. Але ви хочете зробити це, можливо, лише якщо один (або дуже мало) процес (и) має доступ до цієї бази даних. Якщо у вас є десяток процесів, які одночасно отримують доступ до однієї бази даних, краще встановіть справжній RDBMS SQL (à la MariaDB або PostGreSQL)

Також зауважте, що хоча (бінарний) формат .sqliteфайлів баз даних задокументований як "портативний", я набагато віддаю перевагу резервного копіювання баз даних у текстовому форматі SQL (використовуючи sqlite3 mydb.sqlite .dump > mydb.sql). Тоді мені також потрібен додатковий простір на диску для цього текстового дампа (і це знижує реалістичну межу).

Зазвичай Sqlite не є вузьким місцем. Але диск може бути.

PS. Це ж міркування можна застосувати до великих індексованих файлів за допомогою GDBM .

PPS. У моєму відділенні expjs ( вересень 2016 року ) мого монітора MELT (вільне програмне забезпечення GPLv3, на github) я зберігаю всю купу додатків у JSON всередині нової бази даних Sqlite. Я провів крихітні експерименти з кількома мільйонами об'єктів (досить "великими") без поганих сюрпризів. YMMV.


7
Ви могли перестати писати після четвертого абзацу. Але +1 все одно.
Роберт Харві

3
Можливо, але я був неприємно дуже здивований, помітивши, що навіть у свіжій базі даних sqlite, що має лише кілька мегабайт, транзакції настільки важливі на практиці (лише один єдиний процес доступу, власне, написання цього нового файлу).
Базиль Старинкевич

3
Це, безумовно, справедливо для записів. На практиці важко уявити базу даних SQLite таких розмірів, як описано в ОП. Postgresql був би, мабуть, кращим вибором не за своїми можливостями розміру, а за промисловістю одночасності, якої SQLite не має.
Роберт Харві

5
Існує безліч законних ситуацій, коли ви могли б мати бази даних SQLite з величезними розмірами файлів. Від самих розробників SQLite: думайте про це не менш як про заміну MySql, а більше як про заміну fopen. Написання деякого програмного забезпечення для 3D-кадрів та використання баз даних SQLite для зберігання даних про об’єкти може бути цілком розумним.
whatsisname

2
@Pacerier: Файли з фільмами та подібні бінарні краплі зазвичай не зберігаються в базі даних. Вони зберігаються у файловій системі, а посилання на них зберігаються в базі даних.
Роберт Харві
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.