2012-03-22 5 views
6

Sto lavorando alla progettazione di una base che probabilmente rimarrà inferiore a 100 MB, ha un proprio server e verrà letta e modificata tramite un'applicazione web Java EE intranet. Ho trovato molti riferimenti sull'ottimizzazione per basi ampie e so che è un problema molto più critico, ma ho molto tempo, la velocità di lettura/inserimento è una priorità del progetto e sono abbastanza sicuro di può trarre vantaggio da una dimensione del db totale così piccola, in qualche modo. A meno che MySQL non sia già ottimizzato naturalmente per quel tipo di benchmark di piccole dimensioni, ovviamente.Come ottimizzare MySQL per gestire un piccolo database, ad esempio <100mb?

Si adatta alla memoria, ovviamente, ma ho bisogno che i suoi dati persistano effettivamente, sul disco, o almeno siano salvati su disco a breve; Ho pensato ad alcune alternative pazzesche, come il caricamento sequenziale dell'intera base nella memoria al primo momento necessario (al momento della connessione dell'utente, probabilmente?), In qualche modo, e in seguito sul disco.

ma ho pensato che meglio di chiedere qui e vedere se qualcuno ha affrontato questo tipo di situazione prima e aveva un'idea decente per trarre profitto dalla dimensione piccola base.

sto pensando più in termini di accesso al database e non strutturare, ma se qualcuno ha suggerimenti per la progettazione di strutture per le piccole basi e ritiene che rendere il problema dell'ottimizzazione accesso del tutto irrilevante, affermando che è probabilmente una risposta adeguata come bene.

Grazie in anticipo.

Modifica: l'app è un po 'critica e dopo che ho finito sarà sviluppata da ragazzi che sono per lo più abituati a MySQL, quindi i diversi DBMS non sono una gran scelta a meno che siano veeery simili a MySQL.

+4

Assicurati solo che le cache di mysql siano impostate per essere più grandi della dimensione del db e che verranno automaticamente memorizzate nella cache mentre lavori sul tavolo. –

+0

Ci ho pensato, non ero sicuro che avrebbe funzionato in quel modo. Sembra abbastanza liscio, abbastanza sicuro che lo farò solo allora. Grazie! – userBigNum

+0

Si sta effettivamente verificando problemi di prestazioni? Sembra che tu stia tentando un'ottimizzazione prematura. Innanzitutto, implementa l'applicazione, quindi esegui il benchmark e infine ottimizzala se il benchmark mostra gravi colli di bottiglia. – Barmar

risposta

0

Si potrebbe provare a guardare membase - mi hanno detto cose molto buone per quanto riguarda le prestazioni e la persistenza. Essenzialmente un "database" di memoria che viene mantenuto sul disco.

+0

I suoni sono interessanti, ma ho visto alcuni post dalla metà del 2011 nelle schede membase ed era chiaro che non era ancora abbastanza stabile da essere implementato in un ambiente di produzione, è molto meglio ora? Inoltre, quanto è simile a MySQL? Mi sto allontanando da questo paese dopo che ho finito il progetto, e i ragazzi che lo manterranno in seguito sono in realtà solo abituati a MySQL. Grazie! – userBigNum

+0

Apparentemente si chiama Couchbase? : http://www.couchbase.com/membase, quindi sembra che sia passato dall'ultima visualizzazione. Per quanto riguarda la compatibilità, non posso davvero commentare - ho visto la membrana usata in congiunzione con mysql in alcuni progetti di php e ho sempre pensato che fossero strettamente correlati - potrei aver pensato un po 'più di quanto avrei dovuto. – FreudianSlip

+0

Sembra interessante, è basato su memcached, che è già abbastanza stabile, e lo storage con valori-chiave sarebbe sicuramente adatto alle mie esigenze. Eppure, come la maggior parte dei server NoSQL, sembra essere fatto per ridimensionare i cluster distribuiti e così via. Quei progetti PHP che hai visto, erano così grandi? Sono preoccupato che questo orientamento alla distribuzione potrebbe rendere la sua API un po 'macchinosa per un progetto più piccolo come il mio. – userBigNum

1

Sono stati creati database per gestire solo questo tipo di cose, quindi la maggior parte dell'infrastruttura è lì per te.

Spetta solo a voi per:

  • creare gli indici appropriati sulla base dei dati, il volumn e il DBMS.

  • Normalizza i dati.

  • applicare buone convalide - non nulli, unici, ecc

  • Usa spiegare piano per vedere come le query possono essere accelerati - diversa per ogni situazione.

  • Utilizzare la cache per migliorare le prestazioni.

  • Verificare che tutte le tabelle contengano chiavi primarie univoche (ovvie forse, ma ancora necessarie).

+0

Bene, questo è il senso comune per basi di tutte le dimensioni, non è vero? Anche se immagino che potresti occuparti di personalizzare gli indici in modo specifico per le piccole basi, magari scegliendo una struttura di classe più complessa che recupera meglio nei casi di basso ordine ... quando dici semplicemente "Usa la cache per migliorare le prestazioni", intendi il caching di tutta la base o qualcosa di più intricato? Grazie! – userBigNum

+0

Intendo impostare la memorizzazione nella cache in modo che la ripetizione delle singole query possa essere eseguita più rapidamente. –

Problemi correlati