Sto programmando un database simile a Cassandra. Io uso C ++.
Il database semplificato memorizza i suoi dati in una o due "tabelle di memoria" e diverse "tabelle del disco", tutte memorizzate in una singola directory.
Ho una classe che si occupa della singola "tabella del disco" e di un'altra classe per la "tabella della memoria".
Ho bisogno di creare una classe che si occupi di array di "tabelle di memoria" e "tabelle di dischi".
Attualmente sto pensando di seguire:
class MultipleTable : public AbstractTable{
// get, set, bla...
virtual Pair *get(string key){
for(unsigned i = 0; i < getTableCount(); ++i){
// Do not pay attention to pointers,
// I am working to remove them.
AbstractTable *table = getTable(i);
Pair *p = table->get(key);
if (p)
return p;
}
return nullptr;
}
virtual AbstractTable getTable(unsigned id) = 0;
virtual unsigned getTableCount() = 0;
}
Quindi ho intenzione di estendere questa classe e scavalcare l'esatta "memorizzazione" delle tabelle (perché potrebbero esserci due o tre diverse sottoclassi).
Tuttavia, mi chiedo se questo sia il modo migliore per farlo?
Come alternativa, potrei usare std :: vector o la mia classe di archiviazione simile a std :: vector e passarla nel c-tor.
D'altra parte, questo modo attuale "isolerà" un brutto codice per le directory di scansione e probabilmente mi darà qualche altro vantaggio in seguito con i memtables.