SQLite на виробничому сервері? [зачинено]


9

Я знаю про SQLite вже давно і знаю, що він швидко палає, але я ніколи не пробував це на виробничому сервері. Мені ніколи не вдалося знайти надійної оцінки того, скільки трафіку він може обробити, перш ніж вийти з ладу.

У когось є якісь цифри чи стаття з цього приводу?


2
Попередження: Запитання та деякі відповіді містять помилкові уявлення, непорозуміння та застарілу інформацію!
Кріс С

Ми оцінювали SQLite як кешування рішення у виробництві: uri.agassi.co.il/2014/10/using-sqlite-for-production.html
Uri Agassi

Відповіді:


4

На жаль, я не маю для вас жодних даних про можливості завантаження, але кілька коментарів щодо деяких факторів, що обмежують продуктивність:

  • На швидкість SQLite впливає швидкість диска, на якому він знаходиться, і чи багато вкладок / оновлень відбувається (тобто доступ для запису). Блокування запису обмежено швидкістю обертання диска

  • Угоди запускаються за замовчуванням, але ви отримаєте більш високу продуктивність , якщо ви почати і здійснити операцію. У мене були дуже швидкі масові вставки під час програмної обробки транзакцій

  • Якщо ви, як правило, читаєте лише дані, то ви отримуєте хороші показники з мого досвіду. Отже, SQLite може використовуватися як система кешування для зберігання зчитувань сервера баз даних, окремих віддалених даних або складних запитів.

  • Він використовує менше ресурсів, ніж сервер бази даних, тому це може вплинути на продуктивність сайту, оскільки звільнить більше ресурсів для веб-сервера та коду програми

  • Якщо вам потрібна кількість одночасних записів, можливо, сервер бази даних (наприклад, MySQL, Postgres) цілком може служити вам краще

Як заявив Devrim , сайт SQLite зазначає, що близько 100 тис. Користувачів на день має бути добре. Система Trac вимагає запису, тому в цьому випадку продуктивність, можливо, буде повільнішою


Дякую за відгуки, так що в основному ви можете писати лише в базу даних 1 за один раз? Але ви все ще можете змусити людей читати з бази даних, не замикаючись? Якщо це так, я щойно отримав кілька ідей щодо системи кешування.
Д-р Гідраліск,

Номер "100 К", який кидається навколо, марний. Документи читають "Взагалі кажучи, будь-який веб-сайт, який отримує менше 100 Кт / день, повинен добре працювати з SQLite." "Звернення" зазвичай визначається як запит HTTP. Сюди входить запит для кожного .js, .css та зображення при зверненні. Що це стосується продуктивності БД? Якщо припустити, що автори означали "перегляд сторінки", це все ще марно. Скільки запитів на перегляд сторінки? Коефіцієнт читання до запису? На якому апаратному забезпеченні працює БД? Недоцільно використовувати SQLite для веб-сайту, коли є щонайменше десяток інших кращих інструментів для роботи.
jamieb

@Dr Гидраліськ Так, читає може відбуватися паралельно .. як файл
CEZ

@jamieb Справа про "хіти" - справедлива. Ніхто не згадав, які апаратні чи серверні ресурси доступні, хоча це може бути невеликим віртуальним сервером для всього, що ми знаємо. Залучення баз даних SQLite до системи кешування, або в першу чергу таблиць лише для читання, може дати переваги продуктивності, особливо коли сервер бази даних є віддаленим. Кеш пам'яті + кеш SQLite запитів баз даних позбавить від запитів баз даних тільки.
Чес

3

У мене є кілька моментів, щоб додати до цих хороших відповідей.

Поточна версія SQLite має WAL (Write-Ahead Logging), завдяки чому читання та запис можуть продовжуватися одночасно. Тож традиційного обмеження одного письменника, згаданого в попередніх відповідях, вже не існує. Я ще не бачив WAL у виробництві, тому не можу коментувати, наскільки добре він масштабується.

Використовуючи WAL чи ні, якщо ваша база даних SQLite читається лише (або пакетно оновлюється) і вона вписується в оперативну пам’ять (у вашої ОС є достатня запасна оперативна пам’ять, щоб зберігати її в буферах), вона може дуже добре масштабуватися у виробничому веб-додатку. Я особисто дуже скептично ставився до його продуктивності, масштабованості та надійності, але зараз після дев'яти місяців у виробництві він добре зареєстрував навіть найскладніші частини системи .


1

Sqlite чудово підходить для вбудовування в додатки, і саме для цього він розроблений, але він, звичайно, не «палає швидко». Я використовую його для декількох власних програм, виключно для зручності наявності лише двох файлів, які можна скопіювати на іншу машину, щоб надати повністю працюючу програму. Тести на MySQL, використовуючи ту саму структуру, індекси тощо, показують, що Sqlite є значно повільнішим, навіть для невеликих баз даних. Я б очікував, що різниця в продуктивності зростатиме в міру збільшення розміру бази даних, хоча я не можу сказати напевно, оскільки я використовував її лише з базами даних менше 100 МБ.


PRAGMA може бути налаштована на підвищення продуктивності за рахунок потенційного періодичного пошкодження бази даних (однак не втрачаючи даних). З мого досвіду, я міг би змусити SQLite брати вставки приблизно в 250-300р / с на старій машині WindowsXP.
djangofan

-1, тому що я не згоден. Я створив і запитував бази даних SQLite розміром у кілька ГБ, і ніколи не отримав би однакову кількість запитів за секунду, використовуючи, наприклад, MySQL (у тому ж типі апаратного забезпечення). SQLite може легко робити 120 к запитів запису в секунду, якщо ви знаєте, як правильно його масажувати .
Алікс Аксель

0

Я думаю, що sqlite є лише швидшим, ніж текстовий / xml-файл (ви можете бути здивовані, якщо ви спробували його). І це не підтримує паралельність, якщо ви хочете створити сайт для інтрамережі, де люди реєструють свої робочі години або використовують квитки на траси, це може слугувати добре. Крім цього, цього слід уникати і замінювати mysql або couchdb.

Веб-сайт sqlite каже, що 100 тис. користувачів на день повинні бути добре, але я дуже сумніваюся в цьому, оскільки простий проект trac сильно застряє при використанні офісу в 10 ppl.


0

Sqlite не є традиційною програмою DB для клієнтів / серверів. По суті це бібліотека, вбудована в інший додаток. Він призначений для однокористувацьких настільних додатків. Ви абсолютно не хочете намагатися використовувати його як якусь окрему заміну MySQL / PostgreSQL / MS-SQL у середовищі багатокористувача, оскільки вся БД заблокована під час запису. Ви будете мати справу з суперечками навіть про легке навантаження, що знищить продуктивність.


У WAL блокуються лише одночасні автори. Плюс двигун MySQL за замовчуванням (MyISAM) також блокує повні таблиці, коли є запит на запис.
Алікс Аксель

1
@AlixAxel Ця відповідь була написана за півроку до появи WAL.
jamieb
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.