Domanda

Sto creando un'app desktop in Delphi e intendo utilizzare un database incorporato. Ho iniziato il progetto usando SQlite3 con la libreria DISQLite3. Funziona ma la documentazione sembra un po 'leggera. Recentemente ho trovato Firebird (sì, sono stato fuori da Windows per un po ') e sembra avere alcune caratteristiche e supporto interessanti.

Quali sono alcuni pro e contro di ciascun db incorporato? Le dimensioni sono importanti così come il supporto e le risorse. Cosa hai usato e perché?

È stato utile?

Soluzione

Uso SQLite (tramite DISQLite3) in FeedDemon da diversi mesi e lo consiglio vivamente: è stato estremamente veloce e stabile. Come ha detto Javier, i documenti per la libreria possono essere sottili, ma i documenti per lo stesso SQLite sono molto buoni.

Altri suggerimenti

Sto usando Firebird 2.1 Embedded e ne sono abbastanza soddisfatto. Mi piace il fatto che la dimensione del database sia praticamente illimitata (testata con database da & GB 4 GB e funziona) e che il file di database è compatibile con Firebird Server in modo da poter utilizzare gli strumenti standard per la gestione e l'ispezione del database. La distribuzione consiste nel trascinare alcuni file nella cartella exe.

L'accesso simultaneo da più programmi non è supportato ma l'accesso simultaneo da più thread lo è (purché si assicuri che sia in corso una sola operazione di "connessione" in un dato momento).

Ho usato SQlite3 per molti progetti (ma da C / C ++ e Objective-C). È estremamente piccolo - nessuna dipendenza - il database è in un singolo file.

È il db di scelta per gli sviluppatori Mac perché è supportato direttamente da CoreData e su iPhone - quindi c'è una grande base di utenti (per non parlare di tutti gli altri utenti).

Vediamo, confronto rapido:

SQLite:

  • digitazione dinamica nel database
  • file multipiattaforma
  • funziona su Windows, Linux, Mac, ecc.
  • dominio pubblico
  • supporta le transazioni
  • si basa sulla sicurezza del file system, non include la propria sicurezza

Firebird incorporato:

  • digitazione forte nel database
    • non tutti i tipi di dati SQL sono supportati
  • file multipiattaforma
    • Firebird incorporato funziona solo su Windows
    • I file da Firebird incorporato sono nello stesso formato della versione completa del server
    • I file da Firebird incorporato possono essere copiati su un server non Windows per l'uso
  • disponibile con un MPL modificato (" ciò che è nostro è nostro e deve rimanere gratuito, ciò che è tuo è tuo e non devi rilasciarlo ")
  • supporta transazioni, trigger, ecc.

MySQL incorporato:

  • il supporto per le funzionalità SQL dipende dal formato del file
  • (IIRC) file multipiattaforma
  • GPL a meno che tu non paghi le royalties
  • funziona su Windows, Linux, Mac
  • incredibilmente popolare tra la folla open source

Anche i database incorporati hanno i loro punti di forza e di debolezza. Dovrai valutare quei punti di forza e di debolezza rispetto a ciò che stai facendo per decidere.

Ho usato DBISAM su numerosi progetti. È completamente incorporato senza nemmeno la necessità di una DLL esterna. A differenza degli altri che hai elencato, è commerciale. Un sacco di grandi funzionalità però e molto ben documentate e supportate. Hanno un successore che non ho ancora provato.

Firebird incorporato è la nostra scelta n. 1 perché senza modifiche al codice, un'app Delphi per singolo utente con database incorporato può essere migrata su una distribuzione basata su server multiutente senza sacrificare nessuna delle funzionalità di fascia alta (come stored procedure, trigger , visualizzazioni, ecc.). Ed è un VERO database gratuito e non GPL il tuo codice nel processo.

Consiglio vivamente di usare AnyDAC quando lavori con database e Delphi, quindi puoi scegliere di scegliere come target FB o SQLite senza problemi.

La mia preferenza sarebbe per FB per le app integrate. Tom

Uso Sybase's Advantage Database Server, ma sono anche R & amp; D Manager, quindi questo post è parziale. :)

Abbiamo componenti Delphi TTable e TQuery nativi sia per WIN32 VCL che per VCL.NET. L'accesso diretto alla tabella oltre al supporto SQL rende Advantage unico tra molte altre offerte Delphi. Advantage supporta tabelle di grandi dimensioni (limitate solo dal numero di record, 2 miliardi) e dispone di un motore locale gratuito, che è utile per i PC di sviluppo e per i siti di piccoli clienti che non richiedono funzionalità client / server. Passa a client / server con una singola proprietà di connessione, senza altre modifiche.

Abbiamo un sacco di clienti, quindi l'accesso ai dati al di fuori di Delphi è anche molto semplice (provider di dati .NET, ODBC, OLE DB, PHP, Perl, JDBC, ecc.)

Sito Web del prodotto principale: http://www.advantagedatabase.com Sito Web dello sviluppatore: http://devzone.advantagedatabase.com

Dipende davvero dalle tue necessità. Per le applicazioni per utente singolo, Firebird Embedded o SQLite sono probabilmente le scelte migliori (e il prezzo è giusto). Dall'altro lato, se hai bisogno di supporto per un gran numero di utenti multipli, probabilmente dovresti usare il normale Firebird invece della versione Embedded (il server è semplice da installare quindi non avrai molti problemi qui).

E se hai bisogno di qualcosa nel mezzo, per un'applicazione multiutente moderata, uno dei database piatti sarebbe meglio. Ho scoperto che Database assoluto di ComponentAce una scelta migliore per le mie esigenze rispetto a DBISAM, NexusDB o VistaDB.

Lascia un footprint relativamente ridotto (senza DLL), è un db a file singolo (un must per me), supporta Unicode, compressione BLOB, crittografia e limiti tecnici sembrano impressionanti per un database flat. Inoltre, il supporto è stato buono in alcune occasioni in cui ne avevo bisogno.

Per contro, ho notato che non supporta le transazioni nidificate, ma a parte questo, non ho avuto problemi.

Per quanto riguarda le dimensioni, niente è meglio di SQLite.

quando fai riferimento alla mancanza di documentazione, suppongo sia doc per DISQLite3. I documenti SQLite sono abbastanza completi

Dai un'occhiata a NexusDB. Ho usato con successo in passato.

Il problema con firebird (incorporato) è che il database non può risiedere su un'unità di rete. Inoltre, è difficile avere un database su un'unità di sola lettura (CD / DVD).

Per alcuni hack in merito a queste limitazioni, consultare il wiki di Delphi: http://delphi.wikia.com/wiki/Firebird_tipps

NexusDB offre l'intera gamma da incorporato, a client / server / remoto completo. Anche conforme a SQL2003, credo. Lo sto usando su alcuni progetti, e sono molto contento finora, e il fatto che possa funzionare in una gamma così ampia di "scale". è un grande vantaggio (non dover imparare un altro DB per app in scala, ecc.)

Guarda questo confronto di database incorporato: http://sql-db.cz.cc/ , può essere utile. La maggior parte dei prodotti summenzionati sono presentati qui: Advantage, DBISAM, Firebird, MS SQL Server e molti altri: Accuracer, Apollo, ElevateDB, NexusDB, TurboDB.

Sono parziale al DB assoluto del componente Ace. Sebbene sia un prodotto commerciale ($), è solido, facile da usare, di dimensioni ridotte e ben documentato. Se stai cercando un'enorme applicazione multiutente, questa non è la strada da percorrere, ma se le tue esigenze multiutente sono leggere (o inesistenti) questa è un'opzione solida.

Sto usando SQL Server Express e i componenti ADO. Funziona alla grande. È possibile eseguire l'installazione di SQL Server Express con la riga di comando per nascondere le complessità agli utenti. È inoltre possibile distribuire un database caricato per nome file. Ci sono milioni di utenti del server SQL, quindi le soluzioni a tutti i problemi sono facilmente reperibili negli intertubes :-)

Ho fatto una ricerca sul web per trovare un pacchetto di database veloce per la mia applicazione Delphi. Volevo che fosse completamente contenuto nell'eseguibile senza che fossero necessarie librerie o DLL esterne. Inizialmente ho trovato Accuracer di AidAim. Avevano pubblicato la velocità con cui il loro database era veloce e persino fatto confronti con altri pacchetti simili a & # 8220; prove & # 8221; il loro punto.

Volevo credere alle loro affermazioni, ma ho pensato di cercare un po 'di più sul Web per trovare i tempi di altri pacchetti. Sono stato molto sorpreso di trovare un post nei forum di discussione di Delphi in cui una persona ha chiesto quale database utilizzare e c'erano 14 diversi suggerimenti. Uno dei rispondenti aveva fatto i suoi confronti di temporizzazione e aveva trovato Accuracer piuttosto lento rispetto ad altri, che Accuracer aveva (convenientemente) lasciato fuori dalla propria pagina di confronto.

Il post, oltre a ulteriori ricerche sul web di follow-up da parte mia, mi ha portato ad inclinarmi verso DISQLite3 , un prodotto basato su il programma SQLite Open Source , ma con miglioramenti a lavorare in Delphi molto rapidamente, con un sovraccarico molto piccolo e con chiamate basate sui comandi, cosa che mi piace. È attivamente in fase di sviluppo e presto avrà una versione ufficiale di Delphi 2009, sebbene apparentemente l'attuale versione funzionerà con D2009.

Addenum: DISQLite3 versione 2.0.0, rilasciata il 17 novembre, supporta D2009.

So che l'accesso a MS è un db relativamente schifo (e mi aspetto di essere abbattuto tra le fiamme qui), ma se sono necessari solo piccoli dati potrebbe avere dei vantaggi se si utilizza comunque ms office. Per me è stato un modo per archiviare i dati del programma con maggiore flessibilità rispetto ai file CSV, che è un approccio comune per il codice scientifico.

Puoi creare un db di accesso dal codice delphi senza installare ms office usando ado & amp; driver odbc (potrebbe essere necessario avere un file .accdb iniziale senza tabelle da copiare e poi popolare, non ricordo questo dettaglio. Non sono sicuro della situazione della licenza che lo fa.

L'estensione .accdb può essere cambiata in qualcos'altro & amp; il file protetto da password (in misura limitata), quindi non è immediatamente ovvio per gli utenti il ??suo accesso se lo desidera. So che alcuni sviluppatori commerciali fanno questo metodo & amp; l'ho copiato da solo. Ho trovato più facile da installare di sqlite, ma forse perché avevo già usato ado & amp; accesso in passato.

Se incorporato è un must assoluto, guarda DBISAM.

kbMemTable è un buon candidato. Funziona in memoria, veloce, multi-threadding. Utilizzato per essere libero.

Components4Developers

Ho usato DBISAM e kbMemTable in diverse occasioni.

Quello che mi piace di DBISAM è che ha grandi funzionalità e di solito è molto affidabile. L'ho usato in grandi database, ricerca full-text, modalità di sola lettura, CGI e molte altre situazioni.

Tuttavia, è abbastanza grande rispetto ai componenti basati su kbMemTable o SQLite. E non puoi avere un singolo file per database (o anche tabella) - a seconda della situazione, questo è uno svantaggio principale.

kbMemTable è minuscolo ed è ottimo per piccole quantità di dati. Dato che funziona in memoria, ovviamente deve essere una piccola quantità di dati.

Un'altra opzione che ho preso su un paio delle mie app desktop è il dumping dei dati direttamente dalla / alla mia gerarchia di oggetti usando TWriter / TReader. Questa è di gran lunga l'opzione più piccola ed è assurdamente veloce rispetto all'utilizzo di un database. Anche i file di dati sono piccoli.

Tuttavia, presenta tutti i tipi di inconvenienti: è necessario codificare la versione se si desidera aggiungere / modificare campi, a meno che non sia in memoria, è ancora più complicato, nessun supporto multiutente, ecc.

Firebird incorporato è anche la nostra scelta n. 1. E la suite Unified Interbase v2.0 con essa. Una soluzione eccezionale e stabile!

Ho usato ScimoreDB. Ha le sue stranezze in quanto le danno gratuitamente e ha le sue stranezze nei tipi di dati e con alcuni problemi di installazione. Questo era su un progetto C #.

Firebird fino in fondo. Fa abbastanza bene tutto e finora la versione 2.1 è molto solida.

FireBird offre l'opportunità di passare a più utenti prima o poi se hai bisogno di concorrenza (se la tua applicazione è multi-thread).

SQLite non ha rivali se si necessita solo dell'accesso per singolo utente, nessun altro database si avvicina ad esso su alcun aspetto, sia esso prestazioni, praticità, supporto SQL o stabilità.

Firebird è davvero stupendo e ha un ingombro ridotto in modo da poterlo usare incorporato e può essere ridimensionato verso l'alto per molti utenti e unicode fallisce bene Uso i componenti devart con delphi 2009 e FIB plus per delphi 6/7 (la loro versione per 2009 e unicode non è ancora pronta per essere pessima)

Hmmm, nessuno ha raccomandato il BDE - mi chiedo perché sia ??;-)

BlackFishSQL è un'altra possibilità, anche se non ho ancora testato in profondità.

Ho un database in cui devo registrare 5 dati di campo ogni 20 secondi per 10 giorni. 3 campi sono numeri interi, 1 campo è doppio (tempo) e 1 campo è stringa [5].

Sto ancora usando Delphi6 srv2 a causa dei miei componenti. Le versioni più recenti di Delphi sono terribili per i componenti che devo spendere migliaia di dollari per ricostruire la mia libreria di componenti. Perciò delphi 6 è ancora il migliore per le applicazioni commerciali reali che mai la versione di delphis presenta molti problemi. In molti punti come l'USB o le letture comportate così via ... ne rilasciano di nuove prima che le versioni precedenti non si trovassero mai sul mercato.

Ho impostato un codice con Delphi6 che aggiunge 43200 record a una tabella per il test perché distribuirò la tabella nell'applicazione mentre ha 43200 record. Mostrerò tutti i dati su DBChart.

Il risultato del test è sotto i database riempiti le tabelle con il comando insert con 43200 record

  

Dbisam = 34 sec,
  ElevateDb = 11 sec,
  AbsoluteDB = 45 sec,
  SQLlite = 32 minuti,
  Firebird = 12 min,
  MSSQL12 localDB = 28 minuti,
  Tavolo facile = 8 minuti,
  BDE = bloccato,

Non ho testato oracolo, pesce nero, sysbase, nexsusDb ecc. ma sembra che anche loro saranno molto lenti. Mi sono collegato a DBChart e solo elevateDb e absoluteDB ha caricato 43200 record su DBchart in un tempo accettabile come 7 ~ 10 secondi. Altri minuti tutti presi. Quindi i database più lenti hanno sempre bisogno di trucchi di codifica per avere successo in alcuni lavori reali ..

Ho testato anche la loro velocità di ricerca tramite comando di comando che sfortunatamente i database basati su server sono sempre più lenti.

MSSQL e SQLLite3 sono estremamente difficili da gestire in Delphi che mi hanno reso molto stanco.

Questi sono i risultati dei miei test
Alla fine ho deciso di utilizzare AbsoluteDB, Dbisam ed Elevate. Ho buttato via il resto dal PC.

Il software Elevate non supporta la funzione di registrazione che richiede codici extra in fase di esecuzione per la gestione. Ciò rende il database più lento. Altri bug con il software Elevate sono campi di autoinc. Non è possibile ripristinarlo. Pertanto non ho scelto il software Elevat anche se è il database più veloce. Dicono molte buone funzioni, ma quante di esse le usiamo in effetti. Hanno appena lasciato le funzioni più importanti non supportate, ma hanno risolto molte funzioni superflue. e sembra che da 8 anni non ci sia alcun vantaggio.

Se vuoi vedere con i tuoi occhi, prova a vedere ..

Sto pensando tra due DB o DBisam4 ora assoluti

quando si tratta di database integrati, la prima domanda è: è multiutente? In realtà, chi ha bisogno di un database che non consente connessioni multiple (leggi e scrivi) ad esso? Ho provato (intensamente) tutti i database menzionati e ne ho trovato solo uno che funziona davvero come dovrebbe. E questo è Accuracer. L'unico peccato con accuracer è che è una band di tre uomini e cronica mancanza di supporto adeguato. Inoltre è principalmente statico in via di sviluppo in quanto non abbiamo visto caratteristiche reali negli anni. Non sorprende dal momento che solo una persona lo sviluppa effettivamente. Sembra che vivano di vecchia fama. Gli elogi degli utenti lo riflettono (di solito commenti di 10 anni). Per una singola esperienza utente consiglierei Absolute Database. Per quanto riguarda i principali attori, consiglierei SQL Server di Microsoft. Oracle è diventato un bloatware e si sta lentamente estinguendo.

ps ciò che è bello in accuracer è che il loro database incorporato funziona proprio come un server completo. Blocca solo il record corrente se è in uso mentre il resto funziona normalmente. Bel database. Peccato solo che sia stagnante.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top