Escrito por

Pregunta Yone Moreno · jun 13, 2022

Persistencia en %GlobalCharacterStream

Hola buenos días,

Agradeceríamos si ustedes nos leen y responden:

Disponemos de 2 entornos: INTegracion en HealthConnect 2020 y PREproduccion en Ensemble 2018

¿Que un tipo de dato sea %GlobalCharacterStream influye? en concreto: ¿se generan ficheros .stream en el servidor si subimos clases que hagan uso de %GlobalCharacterStream?

Ojeando la documentación, parece que explica lo siguiente:

Parece que NO sería persistente , parece que "almacena caracteres en nodos de datos globales"

https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic…

%Library.GlobalCharacterStream

deprecated stream class %Library.GlobalCharacterStream extiende %Library.CharacterStream, %Library.GlobalStreamAdaptor
Deprecated in favor of %Stream.GlobalCharacter. Stream class that stores character data in global nodes.

Aunque nuestra duda viene por el hecho de que en PRE 2018 la propiedad la guarda como %Library.CacheStorage:

Sin embargo, en INT 2020 como: "%Storage.Persistent"

Por favor, nos podrían responder a la cuestión: ¿este uso de tipo de datos %GlobalCharacterStream repercute en caché , huérfanos, etc...?

Hemos observado que se encuentra deprecado:

Deprecated in favor of %Stream.GlobalCharacter
 

Significa eso que ¿ustedes nos recomiendan cambiar a %Stream.GlobalCharacter?

En ese caso: ¿%Stream.GlobalCharacter? y/o %GlobalCharacterStream repercuten en caché , huérfanos, etc; es decir generan ficheros .stream persistentes en el servidor...?

Muchas gracias por atendernos

Un saludo

Comments

Mario Sanchez Macias · jun 13, 2022

Hola Yone, 

Comentarte que las preguntas enviadas a la comunidad no tienen porqué ser respondidas por personal de InterSystems. La comunidad está abierta a que todos compartamos nuestra dudas y soluciones (incluidos los empleados de InterSystems, que, de vez en cuando también preguntamos). Si necesitas algo urgente y quieres estar segura de obtener respuesta por nuestra parte, lo mejor es que nos abras un caso en soporte desde el WRC.

Respecto a tu pregunta, todo lo que se guarda el un global de una base de datos distinta a la temporal, va a ser persistente. En el caso de los GlobalCharacter, se van a guardar en un global y por tanto va a ser persistente (es decir, que una vez guardado, si reinicias el servidor, el dato va a estar ahí). 

Al ser persistente, si los mensajes no se purgan correctamente, podría dejar nodos huérfanos. Todo dependerá de como hayas implementado la clase y las purgas. Si tienes dudas al respecto, te animo a que abras otro nuevo hilo. 

Finalmente, tal y como indica la documentación, lo suyo es que uses el tipo %Stream.GlobalCharacter, que tiene la misma función y es el que se va a mantener en futuras versiones. El tipo anterior, por estar "deprecated" dejará de funcionar en alguna versión futura.

0
Alberto Fuentes · jun 13, 2022

Hola Yone,

Los Streams se utilizan para almacenar cadenas de datos sin límite de tamaño. Si en una clase persistente, incluyes propiedades de tipo Stream serán persistentes.

%Stream.GlobalCharacter, %Stream.GlobalBinary: persisten los datos en globals (en la base de datos). %Stream.FileCharacter, %Stream.FileBinary: persisten los datos en ficheros (.stream).

Lo que te recomienda la documentación es que utilices estas clases en lugar de sus versiones antiguas, por ejemplo:

  • Utiliza %Stream.GlobalCharacter en lugar de la antigua %GlobalCharacterStream.
  • Utiliza %Stream.FileCharacter en lugar de la antigua %FileCharacterStream.

La gestión de los mensajes huérfanos es como siempre. Si tienes un árbol de clases persistente que cuelga de un mensaje de interoperabilidad (incluya o no Streams), recuerda siempre implementar el método %OnDelete para borrar su contenido adecuadamente.

0