Prima di tutto un database NoSQL è un database che non utilizza un'interfaccia SQL. Ciò che tutti i database NoSQL hanno in comune è che non usano un'interfaccia SQL. Mi sono appena ripetuto? Sì, ma non c'è nient'altro da dire sui database NoSQL come gruppo. Qualsiasi altra cosa che viene detta sui database NoSQL su Internet è errata per alcuni membri del gruppo, o probabilmente lo sarà in futuro in qualche momento con il rilascio di un nuovo database o di un upgrade di funzionalità di uno esistente.
Tutto questo per dire che chiedere se un database NoSQL è una buona scelta per un particolare lavoro non è una domanda in grado di rispondere dato che diversi database NoSQL hanno caratteristiche enormemente diverse.
Nello scenario che descrivi il problema più grande sarebbe sicuramente che stai martellando Facebook con 8000 richieste HTTP al secondo, ma ignoriamolo e concentrati sul problema abbastanza comune di avere una grande quantità di piccoli pezzi di dati.
Gestione dei dati
A parità di altre condizioni, qual è la differenza di prestazioni tra il recupero di una stringa da 8 byte e una stringa da 16 byte da un database? È insignificante e, escludendo qualche oscuro controesempio che è vero per qualsiasi database, SQL o meno, il sovraccarico di tutto ciò che accade in una richiesta fa sembrare il tempo necessario per copiare 8 byte in più. Se vuoi spostare velocemente i dati attraverso un database, ordinarli in grossi blocchi adatti al tuo caso d'uso è una delle cose più significative che puoi fare, spesso molto più importante di quale software di database usi.
Ovviamente ci sono casi in cui il tuo uso non si adatta a grandi blocchi di dati, in alcuni casi una strategia di memorizzazione nella cache in cui i dati vengono mantenuti sia nella forma di suddivisione originale che in blocchi può funzionare bene, in altri casi non c'è un molto da fare ma mantenendo separati i piccoli pezzi.
Manipolazione dei dati
I database sono lenti, vale a dire se si implementa una funzione di manipolazione dei dati in un programma comune, ad esempio prendendo un sacco di piccole stringhe e unendole in una sola e implementando funzionalità simili attraverso una richiesta di database, quindi la versione del database richiede in genere da 100 a 1000 volte il tempo necessario per eseguire l'operazione. Ovviamente la cifra esatta dipende dal database, alcuni database non saranno in grado di farlo, quindi dovresti scrivere un programma che recuperi tutti i dati, esegua l'operazione e poi scrivi il risultato nel database, che è anche un metodo piuttosto lento.
In generale, non fare sul database ciò che potresti ragionevolmente fare ai dati prima che vengano scritti nel database.
Quale database scegliere
Dopo aver preso tutte queste considerazioni, quali sono i requisiti per un database? Sei riuscito a creare una struttura che non ha bisogno delle caratteristiche fantasiose / lente offerte da alcuni database? Se lo facessi, un database SQL potrebbe essere come un coltello svizzero con una lama opaca, molte caratteristiche interessanti, ma non particolarmente adatto a quello che ti serve. Alcuni dei database NoSQL sono semplicemente più veloci e migliori quando servono solo le funzionalità semplici, altri adattano il lavoro allo stesso modo di un database SQL.
La grande domanda
Nonostante sia stato scritto per ultimo in questo post, è la domanda che dovresti fare prima di tutte le altre domande che ho menzionato. Hai davvero bisogno di un database?
È un'ipotesi comune che quando si gestisce una quantità significativa di dati, è necessario utilizzare un database. Ma con un computer moderno è possibile memorizzare diversi gigabyte di dati nella memoria dell'applicazione. Questo ti dà accesso rapido e facile, e i buoni strumenti per la manipolazione sono a portata di mano. L'unica cosa che non ti dà è la persistenza, se il crash del programma di c'è una perdita di energia i dati vengono persi. In molti casi è comunque perfettamente accettabile, il tuo esempio ha dati con una durata di ~ 5 minuti, non ha bisogno di persistenza, non ha bisogno di un database.