In pratica ho un grande tavolo gigantesco (circa 1.000.000.000.000 di record) in un database con questi campi:
id, block_id, record
id è univoco, block_id non è univoco, contiene circa 10k (max) record con lo stesso block_id ma con record diversi
Per semplificare il mio lavoro che riguarda il DB, ho un'API simile a questa:
Engine e = new Engine(...);
// this method must be thread safe but with fine grained locked (block_id) to improve concurrency
e.add(block_id, "asdf"); // asdf up to 1 Kilobyte max
// this must concatenate all the already added records added block_id, and won't need to be bigger than 10Mb (worst case) average will be <5Mb
String s = e.getConcatenatedRecords(block_id);
Se mappo ciascun blocco su un file (non l'ho ancora fatto), ogni record sarà una riga nel file e potrò ancora usare quell'API
Ma voglio sapere se avrò un vantaggio in termini di performance utilizzando file flat rispetto a un database postgresql ben sintonizzato? (almeno per questo specifico scenario)
Il mio più grande requisito è che il metodo getConcatenatedRecords ritorni stupidamente veloce (non così con l'operazione di aggiunta). Sto considerando anche il caching e la mappatura della memoria, ma non voglio complicarmi prima di chiedere se esiste già una soluzione per questo tipo di scenario?