Веб-сайти із внутрішнім використанням: Чи є вагомий випадок проти SQLite?


23

Багато веб-рамок, наприклад Flask або Django, використовують SQLite як свою базу даних за замовчуванням. SQLite є переконливим, оскільки він включений у python, а адміністративні накладні витрати досить низькі.

Однак більшість сайтів громадського виробництва з високим трафіком завершуються за допомогою більш важкої бази даних: mySQL, Oracle або postgresql.

Питання :

Припустимо:

  • Трафік сайту помірний, і одночасний доступ для читання / запису до бази даних буде відбуватися
  • Ми будемо використовувати SQLAlchemy із блокуваннями запису SQLite (хоча цей коментар мене трохи нервує)
  • База даних міститиме, можливо, 60000 записів
  • Структури даних не потребують розширених функцій, виявлених у більш важких базах даних

Чи коли-небудь переконливий випадок проти одночасності SQLite для веб-сайтів, які служать внутрішнім корпоративним інструментом з помірним трафіком? Якщо так, то які умови можуть спричинити проблеми одночасності у SQLite ?

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


Як sqllite з такими функціями, як реплікація тощо, які можуть бути корисні для створення резервних копій тощо? У SQLlite у мене складається враження, що додаток володіє db. Чи можете ви запускати сценарії адміністратора тощо, поки ваша програма не працює?
Дуг Т.

1
Деякі анекдоти про SQLite та одночасність (переважно позитивні): одночасний доступ sqlite3
Daniel B

1
Що стосується внутрішнього веб-сайту, що є переконливою причиною для SQLite? Будь-які обмеження щодо встановлення RDBMS?
JeffO

Крім спрощення середовища розробки на ноутбуках окремих розробників, немає причин. Питання, звичайно, полягає в тому, чи можна розумно спростити умови для розвитку та виробництва
Майк Пеннінгтон

Відповіді:


23

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

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

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

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


Як і більшість зовнішніх веб-сайтів. Двигун бази даних може бути замінений, якщо використовується щось на зразок EF, хоча PostGres, мабуть, буде кращим вибором з самого початку.
Роберт Харві

@RobertHarvey що ​​таке EF?
Майк Пеннінгтон

@MikePennington: Entity Framework. Я думаю, що є інші ОРМ, які також мають прозорість баз даних, або, принаймні, можуть поміняти драйвери.
Роберт Харві

1
Пітонічним еквівалентом було б щось на зразок алхімії SQL
Wyatt Barnett

"Я схильний розглядати SQLite як дуже складний формат файлів, який підтримує запити SQL." Ідеальне визначення.
Wildcard

4

Одягаючи капелюх ІТ-директора, я бачу тут декілька невдач:

  • Ризик корупції даних. Можливо, більш сприйнятим, ніж реальним, але в кінці дня це не транзакційний тип файлу БД, у якого не так багато, якщо будь-яке звернення до поганих записів, окрім запитання, чи є у вас нещодавна резервна копія. Якщо говорити про що. . .
  • Як мені створити резервну копію цієї речі? Таким чином я знаю, що у мене є хороша копія. Переважно без відключення програми в автономному режимі.
  • Як я можу забезпечити доступ до БД? Моє загальне розуміння: SQL lite не має жодного за межами доступу до файлової системи, що є гідним початком, але не все-таки кінцевим. Особливо для веб-додатків, де ви хочете отримати більше градуйованих дозволів, ніж DBA або нічого.

З точки зору розробника, я думаю, що важливо знати, чому саме SqlLite є типовим - це тому, що це легко і це добре демонструє. Якщо ви "продаєте" платформу новим розробникам, важливим є можливість запустити робочий веб-додаток з мінімальною суєтою. І необхідність встати та правильно налаштувати сервер баз даних - це б величезний камінь спотикання, якого слід уникати.


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

SQLite є транзакційним . Використовуйте API резервного копіювання або адаптуйте сценарій резервного копіювання MediaWiki для виконання онлайн-резервних копій. Ваше загальне розуміння моделі безпеки SQLite правильне. Офіційний рада безпеки є «здоровим глуздом»: думати про те, як люди можуть отримати доступ до файлу бази даних і створити свій веб - додаток , відповідно.
Ієн Самуель Маклін Старший

@Brian - Мені важко буде придумати ще один БД, який має цілу сторінку, присвячену "як ця база може бути пошкоджена". Додам, що мені здається, що проект sql lite є дивовижним - вони, ймовірно, мають цю сторінку, тому що вони є різновидом гайок, а також мають щось на зразок 10 рядків тестового коду для кожного рядка виробничого коду і дуже люблять бути впевненими та ретельними.
Wyatt Barnett
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.