2010-09-21 5 views
11

Attualmente sto utilizzando DB2 per eseguire test di unità, ma a volte è piuttosto lento. Avrei bisogno di un buon database in memoria che includesse tutte le funzionalità di DB2. Questo tipo di database in memoria esiste o abilita solo funzionalità SQL standard?Esiste un buon database in memoria che si comporta come DB2

Grazie.

EDIT Il database DB2 si trova su un server remoto, quindi mi avrebbe bisogno di una soluzione di replicare lo schema di quel database su un database locale in memoria per velocizzare i test.

+0

Ogni database è diverso. Nessun database - diverso da DB2 - avrà tutte le funzionalità di DB2. Non è possibile avere "tutte le funzionalità di DB2" senza utilizzare DB2. Quali sono le ** caratteristiche esatte ** di cui hai bisogno? –

+0

Ci sono molte applicazioni che lo stanno usando e documentare tutte le query SQL all'interno di quelle applicazioni sarebbe quasi impossibile. – Drahakar

+0

se non sai quali caratteristiche ti servono, allora non puoi sostituirlo, vero? Se non si conoscono tutte le funzionalità, nessun database può mai essere utilizzato tranne DB2. –

risposta

12

Avrei bisogno di un buon database in memoria che includesse tutte le funzionalità di DB2.

Derby (ex Cloudscape) è compatibile con la lingua DB2. E ha una modalità in memoria.

Forse anche dare un'occhiata a H2 (con DB2 compatibility mode). Ma anche se H2 fosse più veloce, considererei Derby nel tuo caso.

+0

Derby non supporta mai l'istruzione Stored Procedure, quindi non è compatibile con DB2. – Kishore

1

Perché non utilizzare tmpfs (Unix) o qualsiasi soluzione ramdrive convenzionale per Windows? Oppure, puoi ottenere un SSD veloce.

+0

Il database si trova su un server remoto. Quindi, a meno che non installi un DB2 Server sulla mia workstation, questa non può essere un'opzione. – Drahakar

0

Se il bufferpool è sufficientemente grande, anche il database DB2 sarà in memoria.

1

Come accennato da Pascal, Derby è quasi identico sintatticamente a DB2. Avendo provato per la stessa cosa un po 'di tempo fa abbiamo avuto un problema con Derby che non supportava le sequenze, ma i protocolli di connessione sono identici. Ad esempio, è possibile utilizzare il driver JDBC DB2 per connettersi a un database Derby.

Se l'applicazione estrae la connessione del database con Hibernate, o NHibernate (se .Net) utilizzando H2 o HSQLDB potrebbe anche funzionare per i test di unità assumendo che non si stiano facendo affidamento su stored procedure e simili.

Un altro strumento che aiuta con la migrazione dello schema che si rivolge a più DB è http://liquibase.org. Per una build di test, è possibile creare il proprio DB in memoria e, per una distribuzione, creare il database DB2 o generare lo script di migrazione. Costruirà il database con lo schema corretto e offre migrazioni condizionali (ad es. Grant non è disponibile in HSQL, quindi si esegue il set di modifiche solo per DB2).

4

Penso che l'opzione più semplice sarebbe --- DB2.

Scaricare l'edizione Express di Freebie e installarlo sul PC. La bassa velocità è quasi certamente dovuta ai colli di bottiglia e alle limitazioni della rete che utilizzano il client DB2, l'installazione locale li eliminerebbe.

La prossima cosa migliore sarebbe JavaDB (usato per essere conosciuto come Derby!). Che è simile ma non del tutto identico a DB2.

L'utilizzo di qualsiasi altro database consente di scaricare in un pantano di funzionalità non supportate, SQL incomprimibile, nomi diversi per la stessa funzione, diverse funzioni con lo stesso nome di funzione, eccetera.

0

Due possibili database in memoria sono: - timesTen di Oracle. - SolidDB da IBM.Questo potrebbe inviare la transazione di nuovo a DB2, ma le query avrà una davvero alte prestazioni

Per ulteriori informazioni su solidDB http://www-01.ibm.com/software/data/soliddb/