J'ai un webservice qui fait un certain nombre de requêtes de base de données (à MongoDB) et fait ensuite une quantité non-triviale de traitement sur les enregistrements retournés par ces requêtes de base de données. Chaque requête Web doit exécuter environ 15 à 45 de ces demandes, ce qui entraîne des temps de réponse de page inacceptables, chaque requête + traitement prenant environ 20 ms. La mise en cache ne fonctionnera pas car le taux de cache-miss sera élevé et les données devront être aussi fraîches que possible. J'avais prévu d'utiliser Scala + Akka et les acteurs pour paralléliser la classe exécutant et traitant les requêtes mais je sais que la création de threads dans un conteneur de servlet est déconseillée. Quelle est la méthode recommandée pour faire du threading/parallélisation dans une requête web dans Scala?Parallélisation/threads dans une requête web en Scala/Java?
1
A
Répondre
3
Je ne vois pas pourquoi vous ne pouvez pas utiliser Akka's Futures pour ça (j'utilise le 2.0 SNAPSHOT).
import akka.dispatch.Future
Future.sequence(1 to 45 map { i =>
Future {
... make database query i ...
}
}) onComplete { future =>
future.result.map { resultList =>
// resultList.foldLeft...
// resultList.map...
// resultList.foreach...
// resultList.whatever...
}
}
(Et il y a certainement plus d'une façon de faire face à terme à Akka pour répondre à vos besoins. Cet exemple peut ne pas être idéal pour ce que vous voulez)
Jetez un oeil à l'excellente documentation Akka pour Plus d'infos: Akka 1.2R6 Future documentation
Comme je l'ai mentionné dans les commentaires ci-dessus, j'ai utilisé the Akka HTTP module pour construire des applications hautement évolutives et fiables dans le passé, et ils sont tous basés sur l'acteur/l'avenir.
Questions connexes
- 1. Comment chronométrer une requête web dans CherryPy?
- 2. Répondre à une requête Web
- 3. Comment modifier les en-têtes d'hôte de requête dans C# via une requête Web?
- 4. Comment utiliser une requête en C# (pas web)?
- 5. Android Web Service requête en temps réel
- 6. définir une requête web pour l'URL spécifiée
- 7. Comment puis-je simuler une requête web externe dans PHPUnit?
- 8. comment obtenir auth_user dans une requête web python
- 9. Plusieurs NSConnections simultanées pour une requête Web
- 10. Comment appelez-vous une requête Web asynchrone dans VB.NET?
- 11. requêtes DNS multiples dans une requête de page Web
- 12. Définir l'identité pour une requête non Web
- 13. Requête Web référencée par une cellule VBA
- 14. Comment savoir le fichier servi dans une requête Web
- 15. Comment définir un cookie pour une requête web dans Silverlight
- 16. Comment ajouter des paramètres dans une requête Web?
- 17. Puis-je utiliser une requête compilée dans un service Web?
- 18. requête SQL en utilisant Hibernate dans un service RESTful Web
- 19. Comment faire une requête à une page web avec PHP?
- 20. Remplir une ListView avec une requête de service Web URL
- 21. DependencyResolver par requête dans l'API Web
- 22. Combinaison d'une requête SQL en deux parties dans une requête
- 23. Web sémantique - requête sparql
- 24. Erreur de requête Web/Exception Web
- 25. Formatage CSV dans la requête Web
- 26. en comptant deux champs dans une requête
- 27. Twisted web - redirections dans la requête
- 28. Requête multiple dans une requête
- 29. Requête SQL dans une requête
- 30. Comment demander et obtenir une page Web en utilisant la requête http dans jsp
Je ne réponds pas à votre question car, si vous ne pouvez pas avoir plus d'un thread, je n'ai aucune idée de la façon dont vous êtes en parallèle. Ce que je dirais c'est qu'utiliser Akka Actors ne serait probablement pas une bonne idée. Akka Futures serait le chemin à parcourir ici. –
@Derek Je pense que c'est ma question, est-ce que je peux utiliser Actors dans mon code dans une requête web dans Scala + Akka? Je veux avoir plus d'un thread, enveloppant la classe qui fait la requête et le traitement dans un acteur. J'envisage Futures, mais je voulais aussi savoir si je pouvais utiliser des acteurs. –
J'ai réussi à écrire des applications hautement fiables et évolutives avec Mist - le complément HTTP d'Akka qui place un shing Actor entre votre logique métier et le Web Container. Donc je ne vois pas pourquoi il y a un problème avec ça. –