PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

In che modo il backend di archiviazione influenza Datomic?

Requisiti dei servizi di archiviazione

I servizi di archiviazione di Datomic dovrebbero generalmente soddisfare 3 requisiti:

  1. Implementare la semantica dell'archivio valori-chiave :accesso efficiente in lettura/scrittura utilizzando i valori delle chiavi indicizzate
  2. Supporta letture coerenti . per esempio. leggi le tue stesse scritture. Idealmente, letture senza contese/senza blocchi.
  3. Supporto per put condizionali . per esempio. blocco ottimistico + isolamento dello snapshot.

Datomic utilizza i servizi di archiviazione per archiviare blocchi di dati compressi ordinati, in modo simile al modo in cui i sistemi di database tradizionali utilizzano i file system e i requisiti di cui sopra sono praticamente l'API tra il servizio di archiviazione sottostante e Datomic. Quindi la scelta nei servizi di archiviazione dipendono da quanto bene supportano questi tre requisiti .

Scala di scrittura

Datomic di solito non esercita molta pressione di scrittura sul servizio di archiviazione sottostante poiché c'è solo un componente che scrive su di esso, Transactor. Inoltre, Datomic utilizza un processo di indicizzazione in background per integrare la novità nella memoria una volta che ne è stata accumulata una quantità sufficiente (per impostazione predefinita ~ 32 MB ma può essere configurata), riducendo ulteriormente il carico di scrittura costante. L'unica cosa che Datomic scrive immediatamente è il log delle transazioni.

Leggi scalabilità

Datomic utilizza più livelli di memorizzazione nella cache, ad esempio memcached e peers cache, quindi in circostanze ideali, ad esempio quando il set di lavoro si adatta alla memoria, i sistemi non eserciteranno nemmeno molta pressione di lettura.

Carico del sistema

Se il tuo sistema non richiede enorme scalabilità in scrittura e i dati dell'applicazione tendono a stare in memoria, quindi la scelta di un particolare servizio di archiviazione è irrilevante fatta eccezione, ovviamente, per le loro capacità operative (backup, strumenti di amministrazione, ecc.) che non hanno nulla a che fare con Datomic.

Se, d'altra parte, il tuo sistema richiede enorme scalabilità in scrittura o hai un gran numero di peer, ognuno dei quali lavora con più dati di quanti ne possono contenere la memoria (forzando il trasferimento di molti segmenti di dati dallo storage), avrai bisogno di un sistema di storage in grado di scalare orizzontalmente, ad es. DynamoDB. Come accennato in uno dei commenti, se hai bisogno di una scalabilità di scrittura arbitraria, Datomic non è comunque il sistema giusto per te.