Domanda

Sto cercando di aggiornare un'applicazione legacy che fa tutta la sua memorizzazione dei dati in un sistema di tagliare-insieme di file BDE Paradox. Il programma funziona abbastanza bene, in certe condizioni strette, ma ha seri problemi di prestazioni.

Mi piacerebbe cercare di migliorare le cose con l'aggiornamento a un sistema di database migliore. Quello che mi serve è un database locale, preferibilmente uno dove posso riporre il tutto in un unico file, invece del sistema attuale "uno o più file da tabella". Deve sostenere le relazioni chiave esterna e tavola rotante, e deve essere in grado di restituire un risultato in fretta da una query di una tabella con centinaia di migliaia di elementi.

Questo ultimo è importante. Il sistema attuale è indicizzato, ma questo non sembra importare molto. Tutte le query sembrano funzionare in tempo O (N) dove N è la dimensione totale della tabella, e diventa terribilmente lento quando i tavoli cominciano a diventare grande. Io non sono davvero sicuro perché, ma che deve andare via.

E deve lavorare sotto D2009 e versioni successive. Qualcuno può fornire alcune raccomandazioni?

È stato utile?

Soluzione

Un altro voto qui per Firebird incorporato (e Firebird in generale)!

Ho appena avuto un impressionante esperienza porting di un'applicazione 6.0 Interbase per incorporato Firebird 1.5; dopo un po 'la lettura dei documenti, l'effettiva conversione ha preso letteralmente a 20 minuti e ora la mia applicazione funziona felicemente in Vista e Windows 7. Se non è necessario il supporto multi utente-allora sarei seriamente guardare incorporato Firebird (e se si hanno bisogno di supporto multiutente, allora perché non guardare regolare Firebird comunque).

E 'un singolo file per il db e un paio di piccole DLL per il motore, ed è facile da implementare, mantenere e di backup. Ci sono un certo numero di strumenti per aiutare durante lo sviluppo e il supporto tecnico della comunità Delphi per IB e Firebird è seconda a nessuno.

Il supporto SQL è eccellente con i vincoli, trigger e stored procedure (abbiamo anche UDF per contribuire a aumentare la lingua - DLL che può essere scritto in Delphi e utilizzati come funzioni in linea, ecc nel database Molto veloce, molto flessibile. ).

Il tuo punto finale sulle prestazioni - e Interbase è stato sempre piuttosto scattante in ogni caso, e la mia esperienza con incorporato Firebird finora è che 'urla' -. Molto, molto impressionato

Altri suggerimenti

Ho usato questo SQLite Wrapper con buon successo in D2009. L'avevo installato e funzionante in pochi minuti. Ha indicizzazione e molto basso overhead. (Questo è gratuito e non ha bisogno di niente altro oltre lo SQLite Dll)

C'è anche un involucro di SQLite commerciale da Delphi Inspiration e il sito dice che hanno un libero per licenza d'uso non commerciale ed educativo pure. Non ho usato quello.

Ho anche usato il Firebird incorporato, ma è poi anche bisogno di avere componenti di connettività per comunicare con esso. Ho IBObjects ed è quello che io uso per il server e le versioni embedded. Ho provato altri componenti di database Firebird liberi, ma non ho davvero trovato alcuna che mi piace o che mi sentivo fiducioso nella.

[EDIT]
Dal momento che la maggior parte delle persone stanno suggerendo Firebird, qui ci sono alcune componenti di connettività per Firebird che ho provato in passato o che ho sentito di:

Mercury Database Oggetti - Free / Opensource
IBObjects - Commerciale (ho comprato questo uno io)
FIBPlus -
Commerciale Firebirds driver ODBC - Free / Opensource
Zeoslib - Free / Opensource

Ci sono alcune buone informazioni disponibili in questa domanda - SQLite3 e Firebird embedded sembrano essere buone opzioni

.

La concorrenza?

Ho usato SQLite in un progetto (non-Delphi) e sono rimasto molto soddisfatto.

In caso contrario, penso che il DBMS singolo file incorporati di scelta per Delphi sembra essere Firebird.

Prova Database Advantage, offerto da Sybase (acquistato da Extended Systems)

http://marketing.ianywhere.com/forms/ADS91-30-Day

E 'gratis se non hai bisogno di client / server o funzionalità Internet.

Il lato negativo è che non è al 100% VCL, in modo che il VCL incluso collega in modo statico alla DLL.

Se l'applicazione mai ha bisogno di scala, non si dovrà cambiare di nuovo database.

Ti consiglio di utilizzare PostgreSQL come banca dati, lo usiamo in tutti i progetti che lavoriamo e testato con oltre 4 milioni di dischi in una tabella e ha funzionato abbastanza bene.

Un'altra opzione sarebbe quella di utilizzare ADO e un database di Microsoft Access. L'unico svantaggio è che l'utente deve avere il motore Jet e MDAC installata ... che la maggior parte delle macchine fanno. Il vantaggio di questo è che rende l'upsize a MSSQL facile. Basta cambiare la stringa di connessione per puntare al database di SQL Server e fare alcuni cambiamenti di query minori.

Ho usato NexusDB per anni ed è un piccolo, affidabile , flessibile database. E 'scritto in Delphi, è dotato di sorgente completo e può essere compilato completamente nella vostra applicazione (nessuna DLL da distribuire) o correre come un sistema client-server.

E 'difficile sapere se sarà soddisfare le vostre esigenze di prestazioni, ma non ho avuto un problema con il mio SQL prestazioni di query fornito Stavo indicizzazione dei campi a destra. Si tratta di un un file per ogni prodotto da tavola, ma non lasciatevi fermata voi dare un'occhiata.

E 'un prodotto commerciale ma offrono una versione solo DCU che può essere utilizzato solo in singole applicazioni utente / embedded gratuitamente.

Sto lavorando a finire una conversione di una grande applicazione che ha utilizzato BDE / Paradox per un database locale e Oracle 8i per un db a distanza.

Sto usando UniDAC da Devart. Questo mi permette un singolo set componente (completamente libero dal vecchio BDE) che può colpire MSSQLServer come un db locale e continuare a colpire Oracle come il mio telecomando. Ho la prospettiva di essere in grado di passare i database sia a finire molto più facilmente ora, semplicemente cambiando provider.

Mi piace questo approccio, ed i componenti sembrano essere abbastanza ben fatto.

Jay (D2007)

PostgreSQL è molto buona, ma si tratta di un macchinario pesante è più vicino a Oracle in modo da poter fare le applicazioni molto pesanti, ma un po 'di dolore per mantenere

Firebird è fantastico incorporato o no per la connettività nel 2009 è possibile utilizzare FIB più da devrace.com hanno una versione di prova che solo mostrare un nag screen, quindi se non un'applicazione commerciale è ok.

altrimenti se si tratta di un'applicazione commerciale è possibile trascorrere i 300 $ e comprate, ho usato anche componenti Devart per InterBase / Firebird e sono molto buona se si desidera usi liberi ZEOS ma si ottiene quello che si paga http://sourceforge.net/projects/zeoslib/ SQL Lite non è un singolo file e se è multiutente fa schifo

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