Les programmeurs rencontrent fréquemment des situations dans lesquelles ils doivent interroger des collections d'objets en mémoire en fonction de des critères complexes ressemblant à des requêtes SQL ou Criteria. Un scénario typique consiste à filtrer une collection d'objets Car pour récupérer les voitures fabriquées dans les années 1960, avec des plaques d'immatriculation commençant par « AZ », et à classer les résultats par nom de modèle de voiture.
Le filtrage, comme décrit dans d'autres réponses, est une approche appropriée mais souffre de problèmes d'évolutivité. Sa complexité temporelle est O(nt), où n est la taille de la collection et t est le nombre de tests appliqués à chaque objet. Les performances se dégradent à mesure que davantage d'objets sont ajoutés et/ou que la complexité des requêtes augmente.
Une méthode alternative consiste à créer des index pour les champs au sein des objets et à utiliser la théorie des ensembles. Par exemple, la création d'un index sur le champ Car.color permet une récupération rapide des voitures bleues dans une complexité temporelle O(1).
Une autre approche est un "index de requête permanent, " où les requêtes sont enregistrées avec une collection "intelligente". Au fur et à mesure que des objets sont ajoutés ou supprimés, la collection évalue chaque objet par rapport aux requêtes enregistrées. Les objets correspondants sont automatiquement ajoutés ou supprimés des ensembles spécifiques à la requête. Par la suite, les objets correspondant à n'importe quelle requête enregistrée peuvent être récupérés en un temps O(1).
CQEngine (Collection Query Engine) incarne ces concepts. Il fournit un moteur de requête NoSQL pour récupérer des objets à partir de collections Java à l'aide de requêtes de type SQL, éliminant ainsi la surcharge liée aux itérations dans la collection. Il exploite, entre autres techniques, l'indexation et les index de requêtes permanentes. CQEngine est open source et disponible dans Maven Central.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!