J'ai écrit un programme Perl qui recherche et manipule un fichier texte. Ce processus CGI nettoie le fichier directement en mémoire, manipule le fichier en fonction de l'entrée de l'utilisateur, puis génère le résultat HTML.Mise à l'échelle d'un simple CGI Perl sur un serveur à haut volume
Cela fonctionne fonctionnellement sage. Cependant, je sais qu'une fois que je déploierai sur un serveur à haut volume, il ne sera pas en mesure de répondre en temps voulu. Je soupçonne que la mémoire soit un goulot d'étranglement. Quelle est la meilleure façon de partager ce fichier, de sorte qu'il est lu une fois en mémoire une fois que le serveur démarre et plus jamais?
La solution que je devine est un démon serveur qui charge le fichier en mémoire et sert d'autres processus/threads leurs données. Si oui, quelle est la meilleure méthode pour mettre en œuvre l'IPC?
Avez-vous réellement besoin que le fichier soit présent en mémoire en une fois? Je sais que cela facilite la programmation, mais si vous pouvez faire ce que vous avez à faire en le diffusant en ligne/bloc à la fois, tous vos problèmes de mémoire disparaîtront et le mécanisme de mise en cache du disque fonctionnera très bien. –
Quelle est la taille de ce fichier? Si c'est petit, laissez le cache disque en prendre soin. Quelle est la complexité des recherches? Vous pouvez vouloir quelque chose comme SQLite ou un magasin de données NoSQL à la fois pour contenir les données d'une manière organisée, faire les recherches et les mettre en cache. La recherche de fichiers plats n'est pas mise à l'échelle. – Schwern