Siti Web per uso interno: esiste un caso convincente contro SQLite?


23

Molti framework Web, come Flask o Django, utilizzano SQLite come database predefinito. SQLite è avvincente perché è incluso in Python e il sovraccarico amministrativo è piuttosto basso.

Tuttavia, la maggior parte dei siti di produzione pubblica ad alto traffico finiscono con un database più pesante: mySQL, Oracle o postgresql.

Le domande :

Assumere:

  • Il traffico del sito è moderato e si verificherà l'accesso simultaneo in lettura / scrittura al database
  • Useremo SQLAlchemy con i blocchi di scrittura di SQLite (anche se questo commento mi rende un po 'nervoso)
  • Il database conterrà forse 60.000 record
  • Le strutture di dati non richiedono funzionalità avanzate presenti nei database più pesanti

Esiste mai un caso convincente contro la concorrenza SQLite per i siti Web che fungono da strumenti aziendali interni a traffico moderato? In tal caso, quali condizioni causeranno problemi di concorrenza a SQLite ?

Sto cercando specifiche cause alla radice note, invece di paura generale / puntamento del dito non comprovato.


In che modo sqllite con funzionalità come la replica ecc. Potrebbe essere utile per i backup ecc.? In SQLlite ho l'impressione che l'app possieda il db. Puoi eseguire script di amministrazione, ecc. Mentre l'app è attiva?
Doug T.

1
Alcuni aneddoti su SQLite e concorrenza (principalmente positivi): sqlite3 accesso simultaneo
Daniel B

1
Nel caso di un sito Web interno, qual è il motivo convincente di SQLite? Eventuali restrizioni sull'installazione di un RDBMS?
JeffO,

Oltre a semplificare l'ambiente di sviluppo sui laptop dei singoli sviluppatori, non c'è motivo. La domanda ovviamente è se possiamo ragionevolmente semplificare l'ambiente di sviluppo e produzione
Mike Pennington,

Risposte:


23

Consiglio di leggere la risposta ufficiale alla tua domanda, Usi appropriati per SQLite . In particolare, "Situazioni in cui un altro RDBMS può funzionare meglio" avverte che SQLite non supporta la scrittura simultanea:

SQLite supporta un numero illimitato di lettori simultanei, ma consentirà un solo writer in qualsiasi momento nel tempo. Per molte situazioni, questo non è un problema. Ogni applicazione fa in modo che il suo database funzioni rapidamente e vada avanti e nessun blocco dura più di qualche decina di millisecondi. Ma ci sono alcune applicazioni che richiedono più concorrenza e quelle applicazioni potrebbero aver bisogno di cercare una soluzione diversa.

Dal punto di vista dell'adeguatezza, tendo a considerare SQLite come un formato di file molto sofisticato che supporta le query SQL. Tenderei ad evitare SQLite se volessi separare il mio database dalla mia applicazione web, poiché non è ottimizzato per questo caso. In breve, SQLite non è sufficientemente scalabile per l'uso in alcuni scenari, quindi le persone che gestiscono siti Web che sperano un giorno di diventare popolari potrebbero essere meglio iniziare con qualcosa di scalabile, piuttosto che andare con SQLite e in seguito essere costretti a cambiare.

Detto questo, SQLite probabilmente va bene per la maggior parte dei siti Web interni; in genere i siti Web interni non richiedono lo stesso livello di concorrenza e scalabilità.


Nemmeno la maggior parte dei siti Web esterni. Il motore di database può essere sostituito se si utilizza qualcosa come EF, anche se PostGres sarebbe probabilmente una scelta migliore dall'inizio.
Robert Harvey,

@RobertHarvey che cos'è EF?
Mike Pennington,

@MikePennington: Entity Framework. Immagino che ci siano altri ORM che hanno anche la trasparenza del database, o almeno possono scambiare i driver.
Robert Harvey,

1
L'equivalente pitone sarebbe qualcosa come SQL Alchemy
Wyatt Barnett,

"Tendo a visualizzare SQLite come un formato di file molto sofisticato che supporta le query SQL." Definizione perfetta.
Wildcard il

4

Indossando il mio cappello da direttore IT vedo alcuni no-go qui:

  • Rischio di corruzione dei dati. Forse più percepito che reale, ma alla fine della giornata si tratta di un tipo di file non transazionale DB che non ha molto se qualsiasi ricorso a scritture errate oltre a chiedere se si dispone di un backup recente. A proposito. . .
  • Come posso sostenere questa cosa? In un certo senso so di averne una buona copia. Preferibilmente senza portare l'app offline.
  • Come posso proteggere l'accesso al DB? La mia comprensione generale è che SQL Lite non ha nulla al di fuori dell'accesso al filesystem, il che è un inizio decente ma non il tutto, fine tutto. Soprattutto per le app Web in cui potresti desiderare più autorizzazioni graduate rispetto a DBA o niente.

Dal punto di vista dello sviluppatore, penso che sia importante sapere perché SqlLite è l'impostazione predefinita, perché è facile e dimostra bene. Se stai "vendendo" una piattaforma a nuovi sviluppatori, è fondamentale poter accendere un'app Web funzionante con il minimo sforzo. E dover alzarsi e configurare correttamente un server di database sarebbe un grosso ostacolo da evitare.


1
Bene, i backup possono essere eseguiti tramite l' API di backup di SQLite . Riconosco che SQLite potrebbe non essere altrettanto sicuro per impostazione predefinita, poiché, a differenza dei sistemi orientati ai servizi, i client SQLite parlano più direttamente al file di database. Detto questo, SQLite utilizza un journal per proteggersi dagli errori del sistema e dovrebbe essere affidabile se il sistema operativo host supporta correttamente le primitive di blocco utilizzate da SQLite (l'I / O del disco di rete non lo fa). Il sito ufficiale elenca diversi scenari che porteranno a un database SQLite corrotto.
Brian,

SQLite è transazionale . Utilizzare l' API di backup o adattare lo script di backup di MediaWiki per eseguire backup online. La tua comprensione generale del modello di sicurezza di SQLite è corretta. Il consiglio di sicurezza ufficiale è "usa il buon senso": pensa a come le persone potrebbero accedere al tuo file di database e progettare di conseguenza la tua applicazione web.
Iain Samuel McLean Elder il

@Brian - Sarebbe difficile pensare a un altro DB che ha un'intera pagina dedicata a "come questo database può essere danneggiato". Aggiungo che trovo sorprendente il progetto sql lite - probabilmente hanno quella pagina perché sono un po 'pazzi e hanno anche qualcosa come 10 righe di codice di test per ogni riga di codice di produzione e piace essere sicuri e completi.
Wyatt Barnett,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.