Domanda

Stiamo considerando Terracotta per il nostro prossimo progetto.Io sono incuriosito dalla sua potenziale per fornire la persistenza dei dati senza la necessità di un DBMS.(Vedere anche Su con pavimenti in Cotto come una persistenza soluzione)

Uno dei principali dolori di software evolution è quello di rendere più attuali i dati di produzione sono conformi al nuovo modello di dati.Per un RDBMS si sarebbe probabilmente utilizzare SQL script di modifica al momento della distribuzione.Per il Cotto eseguito i dati, non è immediatamente chiaro per me come trattare con i non-banale evoluzione.

C'è un paio di paragrafi di Classe Evoluzione della Terracotta documentazione ma sembra specifico per DSO e rimane piuttosto superficiale.

  1. Quali sono i possibili modi per gestire i dati del modello di evoluzione per la persistente i dati memorizzati in Terracotta? Mi interessa in particolare la non-DSO scenario (es.attraverso la Terracotta Toolkit API).
  2. Fare Terracotta DSO e il Toolkit API differiscono nella loro reazioni evoluto definizioni di classe?
  3. Per comprendere i limiti della classe evoluzione sarebbe utile per sapere come Terracotta rappresenta la comunicazione dei dati oggetto;c'è una specifica per che?
  4. Forse ci sono l'evoluzione dello schema di tecniche OODBMS mondo che sono applicabili in Terracotta?

Come un banale esempio, diciamo che ho un mucchio di Car gli oggetti memorizzati e ho cambiato la modelYear campo di Car classe String per un int.Secondo la documentazione di questo non funziona out-of-the-box.Posso immaginare una soluzione in cui il mio vecchio Car è caricato da una separata classloader durante l'avvio dell'applicazione, e quindi convertito in un nuovo Car.Sarebbe un buon approccio e perché (non)?

È stato utile?

Soluzione

Dipende dal tuo uso case scenario.

Se il costo di caricamento della cache, che è il minimo (min) e si può permettere di tempo verso il basso...quindi non vedo il problema, semplicemente, a ricostruire la cache per una nuova versione.

Se si dispone di un elevato costo per la compilazione dei dati della cache (ore/giorni) e non ci si può permettere qualsiasi considerevole i tempi di inattività quindi è necessario gestire la nuova e la vecchia versione, allo stesso tempo, durante il periodo di transizione.Per questo:

  1. Vorrei definire una cache definizione per ogni nuova versione di la cache di classe e di lasciare la vecchia versione di scadere nella cache.
  2. Il codice dell'applicazione dovrebbe avere "vecchia/nuova versione" di un sostegno.
  3. Un'istanza che avrebbe continuato a lavorare con la versione vecchia fino a quando i dati scadenza/obsoleti (basato su un vecchio nome di cache)
  4. Un'istanza che ha gestito tutte le nuove richieste/flussi con un nuovo versione (sulla base di un nuovo nome di cache)

ad es.in ehcache.xml definire 2 cache (basato sul tuo esempio):

<cache name="com.xyz.Car" timeToLiveSeconds="600"/>
<!--New version goes here-->
<cache name="com.xyz.Car2" timeToLiveSeconds="600"/>

Nel lungo periodo, si dovrebbe allenamento convenzione di denominazione per i vostri file di cache che include la versione evolution.

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