Io stesso sono un antipasto sui database NoSQL. Quindi rispondo a questo a scapito di potenziali voti negativi, ma sarà una grande esperienza di apprendimento per me.
- per dire se MongoDB è adatto a contenere tali dati, che alla fine verranno interrogati su intervalli di tempo (ad esempio recuperare tutte le immagini di una particolare telecamera in un'ora specificata)? Qualche suggerimento sulla progettazione di schemi basati su documenti per il mio caso?
MongoDB essendo un db orientato ai documenti, è bravo a eseguire query all'interno un aggregato (lo chiami documento). Poiché stai già archiviando i dati di ciascuna telecamera nella propria tabella, in MongoDB avrai una raccolta separata creato per ogni telecamera. Ecco come esegui query sull'intervallo di date.
- Quali dovrebbero essere le specifiche del server (CPU, RAM, disco)? qualche suggerimento?
Tutti i database NoSQL sono costruiti per scalabilità orizzontale su hardware di base. Ma dal modo in cui hai posto la domanda, potresti pensare di migliorare le prestazioni aumentando . Puoi iniziare con una macchina ragionevole e man mano che il carico aumenta, puoi continuare ad aggiungere più server (ridimensionamento). Non è necessario pianificare e acquistare un server di fascia alta.
- Dovrei considerare lo sharding/la replica per questo scenario (considerando le prestazioni per iscritto per sincronizzare i set di repliche)?
MongoDB blocca l'intero db per una singola scrittura (ma produce per altre operazioni) ed è pensato per sistemi che hanno più letture che scritture. Quindi questo dipende da come è il tuo sistema. Esistono diversi modi di partizionamento orizzontale e dovrebbero essere specifici del dominio. Una risposta generica non è possibile. Tuttavia, alcuni esempi possono essere forniti come partizionamento orizzontale per geografia, rami ecc.
Leggi anche Una semplice introduzione in inglese al teorema CAP
Aggiornato con la risposta al commento sullo sharding
Secondo la loro documentazione , dovresti prendere in considerazione la distribuzione di un cluster partizionato, se:
Quindi in base all'ultimo punto sì. La funzione di partizionamento automatico è progettata per ridimensionare le scritture. In tal caso, hai un blocco di scrittura per shard , non per database . Ma la mia è una risposta teorica. Ti suggerisco di consultare il gruppo 10gen.com.