Bienvenue à IRIS 2024 !!


Chez un de nos clients, la nouvelle fonctionnalité des bases de données multi-volumes a notamment permis de pallier la contrainte de la taille des fichiers sur leur serveur de stockage en réseau (NAS) limitée à 4To.

Le portail  System > Databases > Database Details permet de voir les différents volumes créés ; ici avec un seuil à 15Mo : 

Extrait de la documentation en ligne :

À mesure que les bases de données clients se développent, les fichiers de bases de données évoluent également. Pour éviter que ces fichiers ne deviennent trop volumineux ou n'atteignent les limites strictes du système de fichiers, InterSystems IRIS prend désormais en charge la division transparente de votre base de données sur plusieurs « volumes » physiques. Cette nouvelle fonctionnalité se configure facilement : pour n'importe quelle base de données, vous pouvez désormais configurer une taille de seuil. Lorsque votre fichier IRIS.DAT initial est sur le point d'atteindre cette taille et que de nouvelles données globales doivent être écrites, InterSystems IRIS créera de manière transparente un nouveau fichier « volume de base de données » et commencera à écrire de nouvelles données dans ce fichier. Lorsque ce volume atteint le seuil, un autre fichier est créé, et ainsi de suite.

Il n'y a aucun impact sur les applications et le code qui accèdent aux données, car ils continuent de voir le contenu complet de la base de données, quel que soit le nombre de volumes sur lesquels elle est répartie. De plus, vous pouvez configurer le répertoire dans lequel le prochain volume doit être créé et, si nécessaire, vous pouvez réorganiser les volumes de base de données dans les répertoires en tant qu'opération de maintenance. Combiné aux travaux prévus pour augmenter la taille maximale globale de la base de données, cela garantira que vos données restent faciles à gérer, bien dans la plage des pétaoctets.

Merci à @Vitaliy Serdtsev : il est aussi possible de récupérer directement un JSON à partir d'une requête SQL, avec les fonctions JSON_ARRAYAGG et JSON_OBJECT :

SELECT JSON_ARRAYAGG(json_obj)
  FROM (SELECT TOP 5
            JSON_OBJECT(
              'Name':name
              ,'Age':age
              ,'DOB':to_char(dob,'Day DD Month YYYY')
            ) json_obj
           FROM sample.person
       )
SELECT JSON_ARRAYAGG(json_obj)
  FROM (SELECT JSON_OBJECT(
                'Name':name
                ,'Age':age
                ,'DOB':to_char(dob,'Day DD Month YYYY')
                ) json_obj
       FROM sample.person
       )
  WHERE %VID BETWEEN 1 AND 5

Résultat :

 

@Jean-Charles Cano,

une autre approche existe cependant : celle qui consisterait à construire une image Docker contenant ton flux FTP, et à lancer une fois par jour un conteneur de cette image pour exécuter le flux.
La commande "docker run" pouvant elle-même être exécutée via $zf(-100) depuis une tâche planifiée exécutée par IRIS à la fréquence souhaitée.

Bonjour @Jean-Charles Cano 
si ton service FTP ne doit s'exécuter qu'une seule fois par jour, à une heure bien précise, la planification est effectivement le bon moyen, en veillant à ce que l'intervalle entre appel soit supérieur à la durée séparant l'heure du START et celle du STOP.

L'autre moyen, sans planification, est de simplement mettre un intervalle entre appels de 86400 pour obtenir un appel une seule fois par jour. L'inconvénient ici étant que le service restera démarré 24h/24h sans utilité.

Bonjour @Cyril Grosjean 
le pb vient peut-être des librairies python requises qui n'ont pas été correctement installées sur l'environnement WIndows.
Tu peux essayer de le résoudre en installant les librairies python sur Windows via la commande irispip 

C:\InterSystems\IRIS\bin>irispip install --target C:\InterSystems\IRIS\mgr\python iris-pex-embedded-python

Bonjour @Pierre LaFay

pour rediriger la sortie standard du Terminal IRIS, tu peux ouvrir un fichier et l'indiquer via la commande USE 

Exemple ci-dessous et en ligne :

Class utils.file
{

Parameter DIRECTORY = "/data/";
Parameter FILENAME = "results";
Parameter EXTENSION = ".txt";
/// Redirect standard output to a file
ClassMethod results() As %Status
{
        set sc = $$$OK
        SET file=..#DIRECTORY _ ..#FILENAME _ "_" _ $tr($zdt($h,8)," :")_..#EXTENSION
        OPEN file:("NRW"):5
            USE file
            WRITE !,"BEGIN RESULTS ",$zdt($h,3),!
            do ##class(UnitTest.utils).run("Test3")
            WRITE !,"END RESULTS ",$zdt($h,3)
        CLOSE file
        WRITE !,"Results are in ",file,!
        return sc
}

}

Avec le fichier contenant toutes les écritures vers la sortie :

Merci @Pierre LaFay et @Seisuke Nakahashi pour cet article intéressant, qui apporte une autre méthode d'exploitation des rapports de performances.
Je vous invite à essayer également YASPE (Yet Another System Performance Extractor), qui génére des rapports html par une exploitation des rapports en Python.