Sto progettando un nuovo sistema per un set di dati geospaziale di grandi dimensioni che richiederà prestazioni di query di lettura rapida. Pertanto, voglio vedere se qualcuno pensa che sia possibile o abbia esperienza / consulenza su DBMS, struttura dati o metodi alternativi adeguati per ottenere le prestazioni richieste nella seguente situazione:
I dati saranno continuamente prodotti da dati radar satellitari elaborati, che avranno una copertura globale. Sulla base della risoluzione satellitare e della copertura del pianeta, stima il set completo di dati per produrre valori in 75 miliardi di località discrete nel globo. Nel corso della vita di un singolo satellite, l'output produrrà fino a 300 valori in ciascuna di queste posizioni (quindi un set di dati totale di> 22 trilioni di valori). Questo è per un satellite, e ce n'è già un secondo in orbita, con altri due previsti nei nuovi anni. Quindi ci saranno molti dati! Un singolo elemento di dati è molto semplice e consisterà solo di (longitudine, latitudine, valore), ma a causa del numero di elementi che stima un singolo satellite per produrre fino a 100 TB.
I dati scritti non dovrebbero mai essere aggiornati, poiché cresceranno solo con l'elaborazione di nuove acquisizioni satellitari. La performance di scrittura non è importante, ma la performance di lettura è cruciale. L'obiettivo di questo progetto è di essere in grado di visualizzare i dati attraverso una semplice interfaccia come un livello su google maps, in cui ogni punto ha un valore colorato basato sulla sua media, gradiente o alcune funzioni nel tempo. (demo alla fine del post).
Da questi requisiti, il database deve essere scalabile e probabilmente cercheremo soluzioni cloud. Il sistema deve essere in grado di gestire query geospaziali come "punti near (lat, lon)" e "points Within (box)" e avere prestazioni di lettura di <1s per localizzare un singolo punto e poligoni che contengono fino a 50.000 punti (sebbene siano preferibili fino a 200.000 punti).
Finora ho un set di dati di test di circa 750 milioni di voci di dati in 111 milioni di località. Ho provato un'istanza postgres / postGIS, che ha funzionato bene, ma senza la possibilità di sharding non lo faccio, questo sarà in grado di far fronte alla crescita dei dati. Ho anche provato un'istanza di mongoDB, che di nuovo sembra OK, quindi lontano e con lo sharding potrebbe essere sufficiente scalare con il volume di dati. Recentemente ho imparato qualcosa su elasticsearch, quindi qualsiasi commento su questo sarebbe utile in quanto è nuovo per me.
Ecco una rapida animazione di ciò che vogliamo ottenere con il set completo di dati:
Questa gif (dalla mia prova postgres) sta servendo (6x3) riquadri raster pre-calcolati, ciascuno contenente ~ 200.000 punti e impiegando ~ 17 secondi per generarli. Facendo clic su un punto, il grafico viene creato estraendo tutti i valori storici nella posizione più vicina in <1 s.
Ci scusiamo per il lungo post, tutti i commenti / consigli sono i benvenuti.