Sto pensando di creare il mio sistema di caching, principalmente per C #, ma questa è più una domanda di design, quindi la lingua non ha molta importanza.
Iniziamo dall'inizio, ho una API di base, che usa l'intestazione ETag per verificare se qualcosa è cambiato.
Questo è ICachingProvider, è l'interfaccia di base per tutti i provider di memorizzazione nella cache.
public interface ICachingProvider {
// Writes a caching entry
void WriteCachingEntry<T>(string uri, string md5, T data);
// Reads a caching entry sync
Tuple<string, T> ReadCachingEntry<T>(string uri);
// Reads a caching entry async
Task<Tuple<string, T>> ReadCachingEntryAsync<T>(string uri);
// Clears the cache
void ClearCache();
// The current storage size
long Size { get; }
// How much can be stored maximum
long MaxSize { get; }
}
Attualmente, ho creato un MemoryCahingProvider
e un FileSystemCachingProvider
in cui l'ultimo è solo in fase di archiviazione dei file JSON nella memoria isolata.
Ora il mio piano è, per implementare anche un sistema di memorizzazione nella cache del database, spero in una migliore velocità e in un minore utilizzo dello spazio, forse mi sbaglio.
Per arrivare al punto della domanda, non sono sicuro del tipo di database che dovrei usare. Per prima cosa ho pensato solo a un database SQLlite, ma non sarebbe stato molto efficiente, perché ho più di un tipo di elemento, simile all'API di Facebook. Il prossimo colpo sarebbe CouchDB o MongoDB, ma non voglio installare più software sul sistema client del necessario.
Qualcuno ha esperienza con quel tipo di cache o qualcuno ha un'idea su come costruire qualcosa di simile e con quale tipo di database?