Domanda

Ecco la mia situazione. Ho un'applicazione server progettata per più utenti da utilizzare, quindi ci sono molte operazioni di lettura/scrittura allo stesso tempo. E le risposte devono essere veloci.

Attualmente ho memorizzato nella memoria tutti i dati in memoria, quindi l'operazione di lettura/scrittura dei dati è più veloce che ci aspettavamo. Per impedire al blocco dei dati di causarmi problemi che ho usato la coda per allineare le richieste degli utenti, farli entrare nel processo di gestore uno da uno.

Ma presto ho trovato un problema. Il programma può gestire solo una richiesta contemporaneamente. Anche il timer di riferimento del programma mi riferisce che ha usato zero ms per elaborare, ma ci sono ancora limiti per gestire le richieste in un secondo.

Quindi sto cercando alcuni metodi più simultanei, come 8 processi per gestire le 8 richieste contemporaneamente. Sarà così bello. Ma c'è un problema più grande con la condivisione dei dati, non voglio reinventare la ruota. Così ho controllato MongoDB, Redis e SQLite.

Ecco i miei compiti, correggimi se avevo torto, grazie mille

MongoDB e Redis sono molto veloci come hanno affermato, ma hanno usato lo stesso meccanismo, possono gestire una richiesta una volta, non è quello che sto cercando.

Quindi SQLite è praticamente più vicino, più processi possono aprire lo stesso file DB contemporaneamente e leggere, il dolore è il suo blocco di scrittura (non sono molto meglio il nuovo blocco in sqlite3).

Ecco la mia domanda, c'è una soluzione solida e buona per questo scenario? Se separassi il processo di scrittura in uno, sarebbe d'aiuto?

Grazie per qualsiasi commento

È stato utile?

Soluzione

La soluzione con MongoDB è il frammento. Mongodb Sharding Fondamentalmente consente di lanciare più processori al problema. Più processori = più thread di scrittura.

Ogni istanza MongoDB ha solo un thread di scrittura. Lo sharding fornisce più istanze e quindi consente più scritture.

Tuttavia, qui c'è un problema più grande. Throughput del disco.

Ho avuto Mongo con oltre 1000 inserti / sec se il tutto è in RAM. Ma la maggior parte delle persone usa Mongo come database con un effettivo supporto di file. Quindi, se stai usando Mongo per scritture davvero pesanti, devi essere preparato con dischi che possono accettare quel livello di throughput.

Ancora una volta, il modo in cui il problema del throughput del disco è il frammento. Costruisci più frammenti e otterrai meno scritture / disco e sostanzialmente meno bloccaggio tutt'intorno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top