Un accès simultané à la base de données ou au fichier mémoire à partir de plusieurs processus, est-ce possible?

StackOverflow https://stackoverflow.com/questions/4233132

Question

Voici ma situation. J'ai une application de serveur conçue pour plusieurs utilisateurs à utiliser, il y a donc beaucoup d'opération de lecture / écriture en même temps. Et les réponses doivent être rapides.

Actuellement, j'ai mis en cache toutes les données en mémoire afin que l'opération de lecture / écriture des données soit aussi rapide que nous nous y attendions. Pour empêcher le verrouillage des données de me causer des problèmes que j'ai utilisé par un.

Mais bientôt j'ai trouvé un problème. Le programme ne peut gérer qu'une seule demande en même temps. Même le chronomètre de référence du programme me signale, il a utilisé Zero MS pour traiter, mais il y a encore des limites pour gérer les demandes en une seconde. Say j'ai maintenant géré environ 100 fois par seconde.

Je recherche donc certaines méthodes plus simultanées, comme 8 processus pour gérer les 8 demandes en même temps. Ce sera si gentil. Mais il y a un problème plus important avec le partage de données, je ne veux pas réinventer la roue. J'ai donc vérifié le MongoDB, Redis et Sqlite.

Voici mes devoirs, corrigez-moi si j'avais tort, merci beaucoup

MongoDB et Redis sont très rapides comme ils l'ont dit, mais ils ont utilisé le même mécanisme, ils peuvent gérer une demande une fois, ce n'est pas ce que je cherche.

Ainsi, le SQLite est à peu près plus proche, plusieurs processus peuvent ouvrir le même fichier de base de données en même temps et lire, la douleur est son verrouillage d'écriture (je ne sais pas à quel point le nouveau verrouillage de SQLite3 fonctionne).

Voici ma question, y a-t-il une solution solide et bonne pour ce scénario? Si je séparais le processus d'écriture en un, cela aiderait-il?

Merci pour tout commentaire

Était-ce utile?

La solution

La solution avec MongoDB est en fusée. MongoDB Sharding Fondamentalement, vous permet de jeter plus de processeurs au problème. Plus de processeurs = plus de threads d'écriture.

Chaque instance MongoDB n'a qu'un seul fil d'écriture. Le Sharding donne plus d'instances et permet donc plus d'écrits.

Cependant, il y a un problème plus important ici. Débit de disque.

J'ai eu Mongo à plus de 1000 inserts / sec si le tout est en RAM. Mais la plupart des gens utilisent Mongo comme base de données avec un sauvegarde de fichiers réel. Donc, si vous utilisez Mongo pour des écritures vraiment lourdes, vous devez être préparé avec des disques qui peuvent accepter ce niveau de débit.

Encore une fois, la voie à travers le problème du débit du disque est de la fragmentation. Construisez plus de fragments et vous obtiendrez moins d'écritures / disques et vous verrouillerez moins.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top