title: SQL Query: Behavior and Usage Overview description: Learn about all the SQL Query operators and clauses that NCache supports and the role they play in cache management.
canonique: https://www.alachisoft.com/resources/docs/ncache/prog-guide/sql-ncache.html
Requête SQL : aperçu du comportement et de l'utilisation
NCache est un cache clé-valeur où chaque nouvel objet est stocké avec une clé unique. Semblable à une base de données relationnelle où la clé primaire trouve des données, NCache permet de récupérer ces données en spécifiant la clé correspondante. Cependant, de nombreux scénarios pratiques nécessitent la possibilité de rechercher de manière flexible pour acquérir des données basées sur différents attributs, et pas seulement sur la clé primaire. Étant donné que la plupart des applications hautement transactionnelles conservent les données dans le cache, la possibilité d'interroger les données est hautement souhaitable.
SQL Query: Importance of Querying in Cache
Supposons qu'il existe un site Web de commerce électronique, où les produits sont interrogés en fonction d'une gamme de critères tels que la catégorie, le prix, le poids, etc. Pour améliorer les performances de l'application, l'utilisation d'un système de mise en cache distribué semble être une solution appropriée. Cependant, perdre la capacité de requête ou réécrire l'application n'est pas acceptable.
Dans un tel scénario, NCache est un cache distribué idéal qui peut faire évoluer les performances de l'application sans compromettre la capacité de requête. Spécifiquement, NCache vous permet de interroger les données mises en cache basé sur différents attributs utilisant une syntaxe de requête de type SQL. En employant NCache pour le scénario mentionné précédemment, vous pouvez interroger tous les produits en utilisant la catégorie, le prix ou le poids comme critères.
Notes
NCache permet de rechercher et de supprimer des données dans un cache à l'aide d'une syntaxe de requête de type SQL.
NCache offre la possibilité de récupérer projections, l'objet entier, les clés de cache uniquement ou la paire clé-valeur elle-même en fonction de vos besoins. En outre, NCache prend également en charge le opérateurs de requête de base, Opérateurs logiqueset fonctions d'agrégation fourni par SQL.
Comment cela fonctionne
In NCache, the data is distributed across different cluster nodes due to partitioning. Searching for a customer using its ID might be easy enough when there are a thousand customers. However, finding one in a million would not have the same complexity, when the records are distributed across different nodes, and the query criteria can be any customer attribute. In this context, query in the cache requires an efficient data-searching mechanism.
En particulier, NCache emploie indexage ainsi que requêtes distribuées pour prendre en charge la capacité de recherche de type SQL en temps réel dans le cache. L'indexation rend un attribut consultable dans le cache. Une fois qu'un élément est ajouté à un index, il revient en tant que résultat de requête sur le nœud auquel le client est connecté. Pendant ce temps, une requête est exécutée de manière distribuée lorsque les données sont distribuées dans la topologie partitionnée.
Important
Un attribut doit être indexé pour pouvoir être recherché dans le cache.
Indexage
Les bases de données traditionnelles utilisent l'indexation pour améliorer les performances des requêtes. Cependant, NCache Usages indexage comme obligatoire pour permettre la recherche via des requêtes de type SQL. Pour interroger les données du cache, tous les attributs interrogeables doivent d'abord être indexés. Il est important de noter que les champs spécifiés dans les projections et les critères doivent être indexés. Une fois qu'un index est défini pour un attribut, toutes les données pertinentes ajoutées au cache sont automatiquement indexées et deviennent consultables. Par conséquent, il suffit de définir les index une seule fois.
Notes
Les opérations de lecture sont beaucoup plus rapides en raison de l'indexation, mais il y a une surcharge pour chaque opération d'écriture.
NCache utilise l'indexation car il s'agit d'une approche axée sur la performance. L'indexation élimine le besoin d'interroger chaque entrée du cache lors de la recherche d'un ensemble de résultats de requête. Cela accélère le mécanisme de recherche et permet d'économiser du temps et de la puissance de calcul.
N'indexez pas les champs inutiles, car cela entraînerait une surcharge de mémoire et de performances.
Requêtes distribuées
La requête exécutée dans NCache varie en fonction de la topologie du cache et de la connectivité client sous-jacente. Dans le cas de la topologie en miroir ou répliquée, la requête est exécutée uniquement sur le nœud avec lequel le client se connecte. Toutefois, cela ne se produit pas lorsque les données sont partitionnées sur les nœuds du cluster.
Les requêtes sur un cluster partitionné exécuter de manière distribuée principalement en raison du partitionnement des données. La requête s'exécute individuellement sur chaque nœud puisque le client se connecte à tous les nœuds du cluster. L'ensemble de résultats composé des données requises est renvoyé par chaque nœud et fusionné avant de renvoyer le résultat final au client. Ici, les performances dépendent également du nombre de nœuds de cluster et de la taille de l'ensemble de résultats renvoyé par chaque nœud.
Notes
La requête distribuée dans NCache est hautement évolutif.
La requête distribuée offre une plus grande évolutivité dans NCache en raison des données partitionnées et de leur exécution parallèle. Lorsque de nouveaux nœuds rejoignent le cluster, les données partitionnées pour chaque membre diminuent. Par conséquent, le temps d’exécution des requêtes passé par chaque nœud de serveur est réduit. De plus, le trafic réseau diminue également, en raison de l'exécution simultanée sur chaque nœud.
Requête SQL dans NCache
NCache vous permet de rechercher et de supprimer des données de cache à l'aide de requêtes SELECT et DELETE de type SQL, respectivement. Les opérations INSERT et UPDATE ne sont actuellement pas prises en charge. ExécuterReader est utilisé pour exécuter la requête SELECT dans le cache et renvoie le jeu de résultats à une instance de ICacheReader. ExécuterScalaire exécute la requête et renvoie la première colonne de la première ligne du jeu de résultats renvoyé par la requête, toutes les colonnes ou lignes supplémentaires sont ignorées.
ExécuterSans Requête est utilisé pour supprimer des éléments du cache. Vous pouvez interroger tous les types de données primitifs et les types nullables à condition que les index de requête aient été définis.
Important
Assurez-vous de fermer l'instance de ICacheReader
après exécution, car il est nécessaire de nettoyer les ressources.
Le langage de requête vous permet de spécifier des critères de clé non primaire en fonction des données requises. Vous pouvez exécuter des requêtes pour interroger les données dans le cache à l'aide de projections et de critères différents. Cependant, les attributs spécifiés dans les projections et les critères doivent être indexés. De plus, en fonction de vos besoins, vous avez la possibilité de récupérer uniquement les clés de cache ou des éléments entiers répondant aux critères de requête donnés.
Types d'indexation
Si vous souhaitez rechercher un attribut dans le cache, il doit d'abord être indexé. NCache offre plusieurs moyens flexibles pour indexage. Compte tenu de la nécessité d'index prédéfinis (statiques), NCache vous permet de définir manuellement des index pour les attributs de recherche à l'avance. Une façon de définir des index statiques consiste à paramétrage. Alternativement, vous pouvez également définir des index par programmation.
D'autre part, index dynamiques tels que les groupes, les balises et les balises nommées sont automatiquement créés au moment de l'exécution pour un attribut. Les index d'exécution vous permettent d'interroger des données dans le cache en fonction de groupes logiques, de balises et de balises nommées.
Requête à l'aide de projections SQL
NCache vous permet de récupérer tous les attributs indexés d'une classe ou de projections spécifiques à partir du magasin de cache en fonction de votre requête. NCache prend en charge différents projections pour faciliter une recherche efficace. Les projections jouent un rôle important dans l'amélioration des performances de votre application en matière de requêtes. Par exemple, vous souhaitez récupérer uniquement la colonne des unités disponibles pour les produits d'une catégorie spécifique. Dans ce cas, vous pouvez utiliser la requête SELECT suivante.
SELECT UnitsInStock FROM FQN.Product WHERE Category = "Sample_Category"
Notes
Pour améliorer les performances, il est préférable de n'interroger que les colonnes essentielles, car renvoyer l'objet complet est coûteux.
Il convient de noter qu'en récupérant uniquement les colonnes souhaitées, la surcharge supplémentaire liée à la récupération de tous les attributs indexés du Product
la classe est évitée. De cette façon, NCache permet aux utilisateurs d'obtenir des performances améliorées grâce à une syntaxe de requête améliorée.
Requête pour les clés et les objets
En fonction de vos besoins, vous pouvez récupérer uniquement les clés de cache ou les données associées à votre requête. Si vous devez énumérer uniquement les clés, NCache vous permet de récupérer uniquement les clés. Il s’agit d’une approche efficace puisque la taille des données à extraire du cache est ainsi considérablement réduite. Par conséquent, vous pouvez l’utiliser pour des performances améliorées.
ExecuteReader
a une option getData
, qui est défini sur false uniquement pour la récupération de clé. Par défaut, sa valeur est vraie. Si vous avez besoin de données pour un traitement ultérieur, la valeur par défaut peut être utilisée pour rechercher des objets.
Opérateurs de requête pris en charge
Vous pouvez utiliser un riche ensemble d'opérateurs fournis par NCache selon vos critères de requête requis pour extraire les ensembles de résultats souhaités de votre cache.
Les catégories d'opérateurs suivantes sont prises en charge dans NCache requêtes :
Catégories | Opérateur |
---|---|
Opérateurs de requête de base | = , == , != , <> , < , > , <=, >=, DANS, COMME , PAS COMME |
opérateurs logiques | ET, OU , NON |
Fonctions d'agrégation | SOMME, COMPTE, MOYENNE, MIN, MAX |
Divers | GROUP BY, ORDER BY, DateTime.Now, DateTime ("toute chaîne compatible avec la date et l'heure") |
Pour plus de détails, veuillez consulter le Opérateurs de requête .
Cache Client
NCache assume le Cache Client (cache L1) peut contenir des données partielles. Étant donné que des données complètes ne sont pas garanties dans le cache L1, les requêtes se produisent toujours sur le cache du serveur (L2) dans NCache. Si le cache L1 est activé côté client exécutant la requête, le comportement d'exécution de la requête ne sera pas affecté. La requête s'exécutera directement sur le cache du serveur. Cependant, lorsque les données changent dans le cache en cluster en raison d'une requête DELETE, L1 se synchronise avec le cache L2.
Bien que le cache client n'influence pas l'exécution des requêtes dans NCache, il peut jouer un rôle essentiel dans l'amélioration des performances. Par exemple, vous souhaitez effectuer d'autres opérations sur le jeu de résultats de la requête, mais l'extraction des données du cache peut nuire aux performances de votre application. Si le cache client est configuré avec un cache L2, vous pouvez récupérer les données souhaitées avec un seul GetBulk
appel. Cela permet de gagner du temps et d'éviter une dégradation des performances puisque les opérations effectuées sur le cache client sont beaucoup plus rapides que sur le cache L2.