Mettre en cache des messages à l'aide de canaux singletons
Singleton Pipe est un ajout à l'ensemble DBMS_PIPE qui vous permet de mettre en cache et d'extraire un message personnalisé et de partager le message entre plusieurs sessions de base de données avec des lectures simultanées.
- À propos de la mise en mémoire cache des messages avec des pipets Singleton
L'ensembleDBMS_PIPEoffre des fonctionnalités étendues sur Autonomous AI Database pour prendre en charge les pipets Singleton. - Actualisation automatique d'un message en mémoire cache à l'aide d'une fonction de mémoire cache
L'ensembleDBMS_PIPEvous permet d'alimenter automatiquement un message de canal Singleton à l'aide d'une fonction de mémoire cache définie par l'utilisateur. - Créer un tuyau Singleton explicite
Décrit les étapes de création d'un tuyau Singleton avec un nom de tuyau spécifié (un tuyau Singleton explicite). - Créer un tuyau Singleton explicite avec une fonction de mémoire cache
Décrit les étapes pour créer un tuyau Singleton avec un nom de tuyau spécifié, un tuyau Singleton explicite et fournir une fonction de mémoire cache. Une fonction de cache vous permet d'alimenter automatiquement le message dans une canalisation singleton.
À propos de la mise en cache de messages à l'aide de canaux singleton
L'ensemble DBMS_PIPE offre des fonctionnalités étendues sur Autonomous AI Database pour la prise en charge de Singleton Pipes.
Un tuyau Singleton dans DBMS_PIPE :
-
Fournit une mise en mémoire cache des données personnalisées à l'aide de messages Singleton Pipe.
-
Prend en charge la possibilité de mettre en cache et d'extraire un message personnalisé d'un maximum de 32 767 octets.
-
Prend en charge le partage d'un message mis en cache entre plusieurs sessions de base de données avec des lectures simultanées. Cela fournit un débit élevé et prend en charge les lectures simultanées de messages entre les sessions de base de données.
-
Prend en charge les bases de données en lecture seule et en lecture-écriture.
-
Prend en charge plusieurs méthodes d'invalidation de cache :
- Invalidation explicite du cache contrôlée par l'utilisateur.
- Invalidation du cache après un intervalle de temps spécifié par l'utilisateur (en secondes). Cette méthode d'invalidation est contrôlée par l'expéditeur du message, à l'aide du paramètre
shelflife, plutôt que par les lecteurs de message. Cela évite les pièges courants dus à une utilisation incorrecte du cache par les lecteurs.
À propos des tuyaux standard et des tuyaux Singleton
L'ensemble DBMS_PIPE permet à deux sessions de base de données ou plus de communiquer à l'aide de messages en mémoire. La fonctionnalité de canal comporte plusieurs applications telles que l'interface de service externe, le débogage, les transactions indépendantes et les alertes.

Description de l'illustration database-pipe-messages-singleton-pipes.eps
Un tuyau Singleton peut être l'un des types DBMS_PIPE pris en charge :
- Canal implicite : Créé automatiquement lorsqu'un message est envoyé avec un nom de canal inconnu à l'aide de la fonction
DBMS_PIPE.SEND_MESSAGE. - Canal explicite : Créé à l'aide de la fonction
DBMS_PIPE.CREATE_PIPEavec un nom de canal spécifié par l'utilisateur. - Public Pipe : Accessible par tout utilisateur disposant de l'autorisation
EXECUTEsur l'ensembleDBMS_PIPE. - Canal privé : Accessible par des sessions avec le même utilisateur que le créateur du canal.
Les pipets Singleton permettent de mettre en mémoire cache un seul message dans la mémoire de l'instance de base de données Autonomous AI Database.
Voici le flux de travail général pour l'utilisation des tuyaux singleton.

Description de l'illustration singleton-pipe-workflow.eps
Présentation et caractéristiques de Singleton Pipe
-
Messages Singleton
- Un tuyau Singleton peut mettre en cache un message dans le tuyau, d'où le nom "singleton".
- Le message dans un tuyau Singleton peut être composé de plusieurs champs, jusqu'à une taille totale de message de 32 767 octets.
DBMS_PIPEprend en charge la possibilité d'emballer plusieurs attributs dans un message à l'aide de la procédureDBMS_PIPE.PACK_MESSAGE.- Pour un canal Singleton public, le message peut être reçu par n'importe quelle session de base de données disposant du privilège d'exécution sur l'ensemble
DBMS_PIPE. - Pour Private Singleton Pipe, le message peut être reçu par des sessions avec le même utilisateur que le créateur du Singleton Pipe.
- Débit de messages élevé pour les lectures
- Singleton Pipes met en cache le message dans le tuyau jusqu'à ce qu'il soit invalidé ou épuré. Les sessions de base de données peuvent lire simultanément un message à partir du canal Singleton.
- Recevoir un message d'un tuyau Singleton est une opération non bloquante.
- Mise en mémoire cache des messages
- Un message est mis en mémoire cache dans un tuyau Singleton à l'aide de
DBMS_PIPE.SEND_MESSAGE. - S'il existe un message mis en cache dans le tuyau Singleton,
DBMS_PIPE.SEND_MESSAGEécrase le message précédent pour ne conserver qu'un seul message dans le tuyau Singleton.
- Un message est mis en mémoire cache dans un tuyau Singleton à l'aide de
- Invalidation du message
- invalidation explicite : épure la barre verticale avec la procédure
DBMS_PIPE.PURGEou en remplaçant le message à l'aide deDBMS_PIPE.SEND_MESSAGE. - invalidation automatique : un message peut être invalidé automatiquement après l'expiration du temps
shelflifespécifié.
- invalidation explicite : épure la barre verticale avec la procédure
- Aucune éviction de la mémoire de base de données
- Les pipets Singleton ne sont pas expulsés de la mémoire d'Oracle Database.
- Un canal Singleton explicite réside toujours dans la mémoire de la base de données jusqu'à ce qu'il soit supprimé à l'aide de
DBMS_PIPE.REMOVE_PIPEou jusqu'à ce que la base de données redémarre. - Un tuyau Singleton implicite reste dans la mémoire de la base de données jusqu'à ce qu'il y ait un message mis en cache dans le tuyau.
Opérations de tuyauterie Singleton
| Opération | DBMS_PIPE Fonction ou procédure |
|---|---|
|
Créer un tuyau Singleton explicite |
|
|
Mettre en cache un message dans Singleton Pipe |
|
|
Lire un message en cache de Singleton Pipe |
|
|
Supprimer un message dans Singleton Pipe |
|
|
Supprimer un tuyau singleton explicite |
Rubrique parent : Messages en mémoire cache à l'aide de pipets singleton
Actualisation automatique du message en mémoire cache avec une fonction de mémoire cache
L'ensemble DBMS_PIPE vous permet d'alimenter automatiquement un message de canal Singleton à l'aide d'une fonction de mémoire cache définie par l'utilisateur.
Par défaut, une fois qu'un message est invalidé avec une invalidation explicite ou implicite de Singleton Pipe, DBMS_PIPE.RECEIVE_MESSAGE suivant n'entraîne aucune réception de message. Pour ajouter un nouveau message à la barre verticale, le message doit être mis en cache explicitement en appelant DBMS_PIPE.SEND_MESSAGE. Pour éviter ce cas, où aucun message n'est disponible lorsque vous lisez à partir d'un canal Singleton, vous pouvez définir une fonction de cache. Lorsqu'une fonction de cache est définie, elle est automatiquement appelée lorsque vous recevez un message dans les scénarios suivants :
- Lorsque le tuyau Singleton est vide.
- Lorsque le message dans une barre verticale Singleton n'est pas valide en raison du temps
shelflifeécoulé.
Pour utiliser une fonction de mémoire cache, définissez la fonction de mémoire cache et incluez le paramètre cache_func avec DBMS_PIPE.RECEIVE_MESSAGE. Une fonction de cache définie par l'utilisateur fournit les éléments suivants :
- La fonction de cache peut être spécifiée lors de la lecture d'un message à partir d'un canal Singleton à l'aide de
DBMS_PIPE.RECEIVE_MESSAGE. - Lorsqu'il n'y a aucun message dans le tuyau Singleton,
DBMS_PIPE.RECEIVE_MESSAGEappelle la fonction de cache. - Lorsque la durée du message
shelflifeest écoulée, la base de données alimente automatiquement un nouveau message dans la barre verticale Singleton.
L'utilisation d'une fonction de cache simplifie le travail avec Singleton Pipes. Vous n'avez pas besoin de gérer les cas d'échec pour recevoir un message d'un tuyau vide. En outre, une fonction de cache garantit qu'il n'y a pas d'absence de cache lorsque vous lisez des messages à partir d'un canal Singleton, ce qui garantit une utilisation maximale du message mis en cache.

Description de l'illustration automatique-cache-refresh-cache-function.eps
Lorsque vous définissez une fonction de cache, le nom de la fonction doit être entièrement qualifié avec le schéma propriétaire :
OWNER.FUNCTION_NAMEOWNER.PACKAGE.FUNCTION_NAME
Définissez une fonction de cache avec la signature suivante :
CREATE OR REPLACE FUNCTION cache_function_name(
pipename IN VARCHAR2
) RETURN INTEGER;Les opérations typiques d'une fonction de cache sont les suivantes :
- Créez un tuyau Singleton, pour un tuyau explicite, à l'aide de
DBMS_PIPE.CREATE_PIPE. - Créez un message à mettre en cache dans le canal Singleton.
- Envoyez le message au canal spécifié dans la fonction de mémoire cache, en spécifiant éventuellement
shelflifepour le message implicite.
Pour utiliser une fonction de cache, l'utilisateur de session courant qui appelle DBMS_PIPE.RECEIVE_MESSAGE doit disposer des privilèges requis pour exécuter la fonction de cache.
Voir Fonction RECEIVE_MESSAGE pour plus d'informations sur la définition d'une fonction de mémoire cache.
Rubrique parent : Messages en mémoire cache à l'aide de pipets singleton
Créer un tuyau Singleton explicite
Décrit les étapes de création d'un tuyau Singleton avec un nom de tuyau spécifié (un tuyau Singleton explicite).
Tout d'abord, pour cet exemple, créez la fonction d'aide receive_message pour appeler DBMS_PIPE.RECEIVE_MESSAGE de manière répétée. Cela vous permet de tester la fonctionnalité de tuyau singleton.
CREATE OR REPLACE FUNCTION msg_types AS
TYPE t_rcv_row IS RECORD (c1 VARCHAR2(32767), c2 NUMBER);
TYPE t_rcv_tab IS TABLE OF t_rcv_row;
END;
CREATE OR REPLACE FUNCTION receive_message(
pipename IN VARCHAR2,
rcv_count IN NUMBER DEFAULT 1,
cache_func IN VARCHAR2 DEFAULT NULL)
RETURN msg_types.t_rcv_tab pipelined
AS
l_msg VARCHAR2(32767);
l_status NUMBER;
BEGIN
FOR i IN 1..rcv_count LOOP
l_status := DBMS_PIPE.RECEIVE_MESSAGE(
pipename => pipename,
cache_func => cache_func,
timeout => 1);
IF l_status != 0 THEN
raise_application_error(-20000,
'Message not received for attempt: ' || to_char(i) || ' status: ' ||
l_status);
END IF;
DBMS_PIPE.UNPACK_MESSAGE(l_msg);
pipe row(msg_types.t_rcv_row(l_msg));
END LOOP;
RETURN;
END;
Rubrique parent : Messages en mémoire cache à l'aide de pipets singleton
Créer un canal Singleton explicite avec une fonction Cache
Décrit les étapes de création d'un canal Singleton avec un nom de canal spécifié, un canal Singleton explicite et fournit une fonction de cache. Une fonction de cache vous permet d'alimenter automatiquement le message dans une canalisation singleton.
Rubrique parent : Messages en mémoire cache à l'aide de pipets singleton