Perché SQL non è così diffuso nelle applicazioni desktop di grandi dimensioni?

26

Come sviluppatore di software, ho lavorato su progetti che vanno da piccole app fatte in casa a applicazioni aziendali di medie dimensioni. In quasi tutti i progetti ho utilizzato un database o mi sono pentito di aver scelto di non usarlo dall'inizio.

Ora mi sto chiedendo alcune cose sui database e il loro utilizzo in applicazioni generali:

  • Perché Windows stesso non utilizza alcun database SQL "centrale"? Per esempio:
    • Errori I dati di report sono archiviati in un gruppo di file,
    • Windows Update archivia tutto in file flat,
    • La cache delle icone è memorizzata in un singolo file molto strano a cui non sembra possibile accedere tramite SQL, ecc.
  • Perché così tante grandi applicazioni evitano l'uso di database? Ad esempio, Microsoft Outlook non otterrebbe utilizzando un database reale invece di reinventare la ruota avendo il proprio formato per i file .pst e memorizzando alcuni dati nel registro?

Se il database aggiunge un ulteriore livello di complessità complessiva e una piccola perdita di prestazioni, è il prezzo di un enorme vantaggio di rendere il codice più semplice nella maggior parte delle circostanze, specialmente quando si tratta di archiviare piccoli blocchi di dati organizzati di grandi flussi binari. Quindi, perché così pochi prodotti stanno effettivamente utilizzando i database? Probabilmente l'unica applicazione che conosco che effettivamente utilizza il database Sqlite è Firefox, e forse Microsoft Exchange (ma l'ultima non è un'applicazione desktop)?

Inoltre, non un set di applicazioni, come Microsoft Office o Microsoft Expression, beneficiano di un database SQL unificato , rendendo più facile la distribuzione delle applicazioni, aggiornare / aggiornare i dati, condividere i dati tra queste applicazioni, effettuare backup, ecc.?

    
posta Arseni Mourzenko 04.11.2010 - 13:56
fonte

6 risposte

20

1) In generale, l'overhead di eseguire un RDBMS completo è troppo grande e aggiungerebbe carico inutile al sistema e complessità.

Avere installato uno ti semplifica la vita come sviluppatore, ma fa peggiorare la vita del proprietario della macchina dato che è probabile che la sua macchina funzioni più lentamente e con più problemi. Negli scontri tra sviluppatori e utenti l'utente dovrebbe quasi sempre vincere.

2) Molti archivi di dati hanno esigenze specifiche che non sono soddisfatte da qualcosa come SQL Server Express.

Ad esempio, i registri degli errori dovrebbero essere scritti nel modo più semplice possibile per massimizzare la possibilità che la scrittura accada e che i dati siano disponibili. SQL Server non sarà mai così semplice.

Per le applicazioni più complesse, l'argomento tende ad essere più ottimizzato per casi utente molto specifici: i file piatti possono essere velocissimi.

    
risposta data 04.11.2010 - 15:00
fonte
30

Molte applicazioni incorporano SQLite . Citando dal loro sito web:

SQLite is a software library that implements a self-contained, serverless, zero-configuration, transactional SQL database engine. SQLite is the most widely deployed SQL database engine in the world. The source code for SQLite is in the public domain.".

Devi solo usare una delle API disponibili, creare un database, tabelle, ecc. e il motore SQL memorizzerà tutto in un file binario che puoi mettere ovunque all'interno del file system dell'utente. Meglio di tutti, è FLOSS.

    
risposta data 04.11.2010 - 15:10
fonte
23

Windows viene fornito con e utilizza un motore di database denominato Extensible Storage Engine (ESE) .

ESE è utilizzato da Active Directory, Exchange Server, Windows Mail e Desktop Search tra molti altri servizi e applicazioni Windows.

Per lo sviluppo, esistono wrapper ESE open source:

Con la spedizione ESE con ogni versione moderna di Windows non ci sono problemi di distribuzione del database. Architettonicamente ESE occupa un ruolo simile ai database incorporati come SQLite.

    
risposta data 23.05.2011 - 17:05
fonte
8

I database relazionali non sono la struttura dati più efficiente per ogni dominio. Un sacco di applicazioni desktop utilizzano database incorporati, non si può facilmente dire che lo stanno facendo se tutto ciò che vedi sono un paio di file di dati.

    
risposta data 04.11.2010 - 14:06
fonte
7

Why Windows itself doesn't use any "central" SQL database?

In realtà, questa idea è stata sviluppata da Microsoft per qualche tempo. Si chiama WinFS . È una tecnologia intrigante ed è disponibile per gli abbonati MSDN. Alcuni giorni presto, ho intenzione di installarlo su una VM e giocare con esso.

    
risposta data 04.11.2010 - 15:22
fonte
6

I database offrono flessibilità e, come ogni funzione, quasi certamente c'è un costo. Se un file flat funziona, allora puoi presumere che nessuno debba interrogare i dati in modi non previsti come in un rapporto ad hoc.

Anche i database fanno un buon lavoro nella gestione di più connessioni / input. Ancora una volta, se questo non è un requisito per l'app desktop, perché aggiungere la complessità aggiuntiva? Oltre che attraverso l'interfaccia utente / l'effettiva installazione di Outlook stesso, quante altre applicazioni o utenti stanno cercando di scrivere sul file di Outlook sul tuo computer?

Sarebbe più facile se tutti i dati fossero in un database relazionale da un punto "Voglio poter interrogare tutti i dati in un modo che ritengo opportuno con una sola lingua come SQL", ma raramente è una priorità con molte applicazioni .

La maggior parte dei programmatori lo guarderà da:

  • So cosa deve fare l'app, questo è tutto ciò che si suppone di fare

  • la mia app è l'unica che lo farà mai accedere e / o manipolarli Dati

  • una semplice struttura di file per conto mio il design funzionerà

  • per almeno un'applicazione che mi piacerebbe per evitare di fare affidamento su quello di altre persone codice e avere il controllo completo.

risposta data 04.11.2010 - 16:03
fonte

Leggi altre domande sui tag