stiamo attualmente lavorando al limite delle risorse con la nostra soluzione basata su server mssql.
Ora abbiamo molte opzioni tradizionali per quanto riguarda la prossima mossa per affrontare il carico:
- acquistare CPU e IO più veloci
- dividere alcuni clienti in un server separato
- sposta db nel cluster
Tutti sono costosi in termini di licenze e hardware o tempo. Quindi, voglio aggiungere un'altra opzione spostando l'intero sistema in una soluzione scalabile che promette cassandra nosql engine.
Tuttavia, non sono sicuro e non ho esperienza con i database noSQL, quindi ho bisogno di capire la struttura dei dati "non strutturati".
Nella nostra applicazione, in sostanza archiviamo i dati inseriti dagli utenti in vari modi come elenchi di "valori-chiave". C'è una tabella padre, che contiene l'elemento head (come un Ordine) e c'è una tabella figlio con le coppie chiave-valore che comprendono il contenuto dell'ordine (come Order_Lines).
Per quanto riguarda il business, Order e OrderLines sono un'unità. Ma a causa dell'RDBMS, sono memorizzati in tabelle e devono essere uniti continuamente.
Durante le operazioni, a volte scegliamo di caricare solo la parte superiore, ma la maggior parte delle volte cariciamo la riga principale + alcuni KVP per visualizzare alcune informazioni utili.
Ad esempio, in un elenco di riepilogo, mostriamo l'identificatore head + alcuni valori in nelle colonne per ogni riga.
AGGIORNAMENTO: memorizziamo forme di qualsiasi tipo. Quindi, in sostanza archiviamo "documenti". Tuttavia, dobbiamo preparare e cercare questi moduli in base a qualsiasi valore, ordinamento, ecc. Il controllo dell'accesso ai dati aggiunge un altro livello di complicità al database.
Come puoi immaginare, la quantità e la disponibilità di alcuni KVP variano da oggetto a oggetto. Non esiste una possibilità valida per creare singole tabelle per ogni tipo di oggetto poiché dovremmo creare migliaia di tabelle per le diverse combinazioni di dati.
Questo tipo di "dizionario" come i set di dati sarebbe meglio archiviato in un database noSQL? E avremo benefici prestazionali da questo? Cassandra modellerebbe questi head + KVP come un unico set di dati? Guardando la pagina Web Cassandra e alcuni tutorial, ho l'impressione che non ci sia molta differenza tra il nostro RDBMS e Cassandra in termini di organizzazione dei dati - lasciandoci con la stessa enorme quantità di join se si desidera selezionare 5 KVP per un elenco per ogni riga.
L'illuminazione è benvenuta, anche i riferimenti ai documenti che spiegano i problemi sono ok.