查找

Announcement
· Jun 21, 2024

Developer Community AI is here!

Greetings and welcome to the new era of AI innovation on the Developer Community...

🚀 InterSystems Developer Community AI 🚀

Developer Community AI (DC AI), our new assistant, is here to answer your questions!

It leverages the InterSystems IRIS Vector Search and is powered by SerenityGPT, providing the most relevant answers sourced directly from the InterSystems Developer Community. Additionally, it can respond in any of the six supported languages (EN, ES, PT, JP, CN, FR)!

 


    How to use:

    • Log in: Access your account on the Developer Community.
    • Navigate to DC AIGo to the DC AI page through the "What's New" block located at the top right corner of the main page.

    • Ask your question: Submit your question directly on the page.


    Additional features: 

    • If you don't find the answer you need, easily convert your question into a post using the "Ask Community" button.
    • Share your chat with others using the share button () and save/copy answers for future reference ().
    • Dive deeper into related Community posts listed in the Sources section on which DC AI's answers are based.


    We want your feedback.
    As we're still in beta, your feedback is crucial to improving Developer Community AI:

    • Rate answers using the Like/Dislike buttons.
    • Share specific feedback, suggestions, and ideas in the comments of this post.


    Try the DC AI today!
    Ask your questions and share your experience with the Community.

    5 Comments
    Discussion (5)2
    Log in or sign up to continue
    Announcement
    · Jun 21, 2024

    [Vidéo] Gestion de la taille de la base de données

    Salut la Communauté!

    Profitez de regarder la nouvelle vidéo sur la chaîne Youtube d'InterSystems France

    📺 Gestion de la taille de la base de données

    Découvrez comment étendre ou tronquer une base de données à l'aide du Portail de gestion de la plateforme de données InterSystems IRIS®, et découvrez les meilleurs moments pour effectuer chaque opération. 

    Cette vidéo est doublée grâce à Bard, l'intelligence artificielle de Google. 

    N'oubliez pas à partager vos réflexions et impressions dans des commentaires après avoir regardé cette vidéo !

    Discussion (0)1
    Log in or sign up to continue
    Article
    · Jun 21, 2024 5m read

    Conexión a Cloud SQL desde Microsoft Power BI usando ODBC y TLS/SSL

    Estamos emocionados de seguir lanzando nuevas funciones para InterSystems IRIS Cloud SQL, como la nueva capacidad de Búsqueda Vectorial que se estrenó por primera vez con InterSystems IRIS 2024.1. Cloud SQL es un servicio en la nube que ofrece precisamente eso: acceso SQL en la nube. Esto significa que estaréis usando tecnologías de controladores estándar de la industria como JDBC, ODBC y DB-API para conectaros a este servicio y acceder a vuestros datos. La documentación describe en detalle cómo configurar los ajustes importantes a nivel de controlador, pero no cubre herramientas específicas de terceros, ya que, como podéis imaginar, hay un número infinito de ellas.

    En este artículo, complementaremos esa documentación de referencia con pasos más detallados para una popular herramienta de visualización de datos de terceros que varios de nuestros clientes usan para acceder a datos basados en IRIS: Microsoft Power BI.

    Paso 0: crear vuestra implementación

    Primero, iniciad sesión en el Portal de Servicios en la Nube y cread una implementación de Cloud SQL. Lo único de lo que debéis estar atentos es de marcar la casilla para habilitar las conexiones externas. Aparte de eso, todos los ajustes predeterminados deberían funcionar bien.

     

    Paso 1: Descargar el certificado

    Para conectaros de manera segura, usaremos certificados para cifrar todo lo que se envíe a través de la red. Podéis descargar el certificado desde la página de detalles de la implementación a través del botón "Obtener certificado X.509":

    Necesitamos referirnos a este certificado más adelante, por lo que debéis guardarlo en un directorio adecuado. Por ejemplo, estoy usando C:\Users\bdeboe\odbc\.

    Paso 2: Crear el archivo SSLDefs.ini

    Para saber qué certificado y configuraciones de cifrado usar, el controlador ODBC de InterSystems busca un archivoSSLDefs.ini, que crearemos a continuación. Por defecto, buscará este archivo en C:\Program Files (x86)\Common Files\InterSystems\IRIS, pero podéis cambiar esta ubicación usando la variable de entorno ISC_SSLconfigurations. Para mantener todas mis configuraciones juntas, establecí esa variable en C:\Users\bdeboe\odbc\ el directorio donde también guardé mi certificado.

    El archivo SSLDefs.ini necesita contener dos cosas para que ODBC sepa cómo conectarse: una configuración de servidor y una configuración SSL. La configuración del servidor simplemente declara el nombre de la configuración SSL que se usará para una combinación particular de nombre de host y puerto, y la configuración SSL tiene todos los detalles para establecer la conexión cifrada. Esto hace que sea sencillo reutilizar una única configuración SSL para múltiples servidores. Aquí está el contenido de mi archivo SSLDefs.ini:

    [My CloudSQL Server] 
    Address=k8s-da0bcd5e-a1b3a0c7-545df92ec8-2e44304cebef1543.elb.us-east-1.amazonaws.com
    Port=443
    SSLConfig=SampleSSLConfig
    
    [SampleSSLConfig]
    CAFile=
    CertFile=C:\Users\bdeboe\odbc\certificateSQLaaS.pem
    KeyFile=
    Password=
    KeyType=2 
    Protocols=28 
    CipherList=ALL:!aNULL:!eNULL:!EXP:!SSLv2 
    VerifyPeer=0 
    VerifyDepth=9

    La primera sección tiene la configuración del servidor, a la que podéis darle un nombre a vuestro gusto. Necesitaréis cambiar la Address para que coincida con el nombre de host de vuestra implementación de Cloud SQL, el cual podéis obtener de la página de detalles de la implementación donde descargasteis el certificado.

    La segunda sección tiene la configuración SSL, cuyo nombre debe corresponder a lo que especificasteis para SSLConfig en la sección de configuración del servidor. La bandera CertFile obviamente debe coincidir con el lugar donde guardasteis vuestro certificado.

    Para más detalles sobre las otras configuraciones, por favor, consultad la documentación completa sobre configuraciones TLS.

    Paso 3: Crear el DSN de ODBC

    Power BI, como la mayoría de las herramientas basadas en ODBC, funciona con DSNs (Nombre de Origen de Datos), que se registran usando una utilidad de Windows. Simplemente haced clic en el icono de Inicio de Windows y comenzad a escribir "ODBC", luego haced clic en "Orígenes de datos ODBC (64 bits)". Elegid la pestaña "DSN del sistema" para registrar una conexión con nuestra implementación de Cloud SQL. Si tenéis instalaciones locales de InterSystems IRIS (de las cuales tengo aproximadamente una docena en cualquier momento 😉), veréis que el instalador creó entradas DSN predeterminadas para ellas:

     

    Haced clic en "Add..." o "Agregar..." para crear un nuevo DSN, eligiendo un nombre y llenando el host, puerto y namespace. Normalmente guardo mi nombre de usuario y contraseña en el DSN para las instancias que no son de producción (y los necesitaremos para probar la conexión en breve), pero podéis dejar estos campos en blanco y suministrar esas credenciales más tarde. El campo "Nombre del servidor SSL/TLS" es un poco redundante (¡trabajaremos en eso!).

     A continuación, haced clic en "Probar conexión" para verificar que todo funcione como se espera. Deberíais recibir un mensaje que dice "¡Prueba de conectividad completada con éxito!". Si no es así, verificad los pasos anteriores o consultad la guía de resolución de problemas. Un mensaje de error particular que puede confundiros (¡al menos a mí me confundió!) es "No SSL config found in the registry or in ssldefs.ini". Este error significa que el controlador ODBC no encontró una coincidencia para vuestra combinación de nombre de host/puerto en el archivo SSLDefs.ini. Como vuestro nombre de host cambia cada vez que creáis una nueva implementación, necesitaréis actualizar o añadir las configuraciones del servidor para cada una.

    Paso 4: Conectar desde Power BI

    Ahora es el momento de usar nuestro DSN de ODBC para cargar algunos datos en Power BI. Después de abrir la aplicación, seleccionad "Obtener datos" o "Obtener datos de otras fuentes", y elegid la opción ODBC:

    Luego seleccionad el DSN que acabáis de crear de la lista:

    En la siguiente pantalla, podéis proporcionar vuestro nombre de usuario y contraseña. No se requieren propiedades adicionales de credenciales.

     ¡Listo! Ahora podéis seleccionar las tablas que queréis incluir en vuestros informes de Power BI:

    Como probablemente habéis notado, todos los pasos excepto el último en este artículo son universales para la configuración de ODBC, por lo que esto debería ayudaros con la mayoría de las herramientas basadas en ODBC. Espero que este artículo os haya sido útil, y no dudéis en añadir vuestros propios consejos y trucos, o compartir vuestras experiencias sobre cómo conectaros a Cloud SQL. También notad que prácticamente nada de lo que se menciona aquí, excepto el paso 0, es específico de Cloud SQL, por lo que podéis utilizar los mismos pasos para conectaros a cualquier instancia de IRIS que requiera conexiones cifradas.

    Discussion (0)1
    Log in or sign up to continue
    Article
    · Jun 21, 2024 9m read

    Determinando los tamaños de los globales y tablas en InterSystems IRIS

    Spoilers: Realizar verificaciones diarias de integridad (IntegrityChecks) no sólo es una práctica recomendada, sino que también proporciona una instantánea de los tamaños y densidad de los globales.

    Actualización 2024-04-16:  A partir de IRIS 2024.1, muchas de las utilidades que comentaremos a continuación ofrecen ahora un modo para estimar el tamaño con un error <2% en promedio, con mejoras significativas en el rendimiento y los requisitos de E/S. Aunque sigo recomendando realizar verificaciones regulares de integridad, hay situaciones donde se necesitan respuestas más urgentes.

    • EstimatedSize^%GSIZE- Ejecuta %GSIZE en modo de estimación.
    • ##class(%Library.GlobalEdit).GetGlobalSize(directory, globalname, .allocated, .used. 2)  - Para estimar el tamaño de un global programáticamente y devolver el espacio asignado o reservado y el espacio utilizado. Nota el parámetro final debe ser "2".
    • CALL %SYS.GlobalQuery_Size('directory', '','*',,,2) - Recuperar tamaños estimados de globals mediante SQL

    Seguir el tamaño de los datos es una de las actividades más importantes para comprender la salud del sistema, rastrear la actividad del usuario y planificar la capacidad necesaria. Los productos de InterSystems almacenan datos en una estructura de árbol llamada globals. Este artículo discute cómo determinar los tamaños de globals, y por lo tanto el tamaño de tus datos. El enfoque se centra medir esos tamaños equilibrando el impacto en los sistemas y la precisión la medida.

    Las tablas SQL son simplemente una proyección de los globals subyacentes. Actualmente, para ver el tamaño de una tabla es necesario examinar los tamaños correspondientes de los globals. Se está desarrollando un mecanismo más eficiente basado en muestras. Comprender la relación entre tablas y globals puede requerir algunos pasos adicionales, que se discuten a continuación.

    Datos

    El tipo específico de datos que se necesita recolectar varía dependiendo de la pregunta específica que se esté tratando de responder. Existe una diferencia fundamental entre el espacio "asignado" para una global y el espacio "utilizado" por una global que vale la pena considerar. En general, el espacio asignado suele ser suficiente, ya que corresponde al espacio utilizado en disco. Sin embargo, hay situaciones donde el espacio utilizado y los datos de empaquetado son esenciales, por ejemplo, al determinar si un global se está almacenando de manera eficiente después de una purga grande de datos

    • Espacio Asignado - Estas son unidades de bloques de 8KB. Generalmente, solo un global puede utilizar un bloque. Por lo tanto, incluso el global más pequeño ocupa al menos 8KB. Este es también funcionalmente el tamaño en disco del global. Determinar el espacio asignado solo requiere examinar bloques de punteros inferiores (y bloques de datos que contienen cadenas grandes). Excepto en escenarios raros o forzados, típicamente hay varios órdenes de magnitud menos bloques de punteros que bloques de datos. Esta métrica suele ser suficiente para entender las tendencias de crecimiento si se recolecta regularmente.
    • Espacio Utilizado - "Utilizado" es la suma de los datos almacenados dentro del global y la información de gestión necesarios. A menudo, los globals asignan más espacio en disco del que realmente se utiliza como función de los patrones de uso y nuestra estructura de bloques.
      • Empaquetado - Calcular el espacio real utilizado también proporcionará información sobre el "empaquetado" del global: qué tan densamente se almacenan los datos. A veces puede ser necesario o deseable almacenar los globals de manera más eficiente, especialmente si no se actualizan con frecuencia. Para sistemas con actualizaciones, inserciones o eliminaciones aleatorias, un empaquetado del 70% generalmente se considera óptimo para el rendimiento. Este valor fluctúa según la actividad. La holgura frecuentemente se correlaciona con las eliminaciones.
      • Coste de E/S - Lamentablemente, una gran precisión conlleva grandes requisitos de E/S. Iterar bloque por bloque de 8KB a través de una base de datos grande no sólo llevará mucho tiempo, sino que también puede impactar negativamente el rendimiento en sistemas que ya están cerca de sus límites previstos. Esto es mucho más costoso que determinar si un bloque está asignado. Esta operación tomará un tiempo del orden de (# de procesos paralelos) / (latencia de lectura) * (tamaño de la base de datos - espacio libre) para devolver una respuesta.

    InterSystems proporciona varias herramientas para determinar el tamaño de los globals dentro de una base de datos específica. Generalmente, se necesita conocer tanto el nombre del global como la ruta completa del directorio de base de datos subyacente para determinar el tamaño. Para implementaciones más complejas, se requiere realizar cálculos para determinar el tamaño total de un global distribuido en múltiples bases de datos mediante el mapeo de nivel de subíndice.

    Determinación de nombres globales

    • Utiliza el Extent Manager para listar los globals asociados con una tabla.  
      • SQL: Call %ExtentMgr.GlobalsUsed('Package.Class.cls')
    • Revisa la definición de almacenamiento dentro del Portal de Gestión, dentro de VS Code (o Studio), o consultando %Dictionary.StorageDefinition.
      • SQL: SELECT DataLocation FROM %Dictionary.StorageDefinition WHERE parent = 'Package.ClassName'
      • ObjectScript: write ##class(%Dictionary.ClassDefinition).%OpenId("Package.ClassName").Storages.GetAt(1).DataLocation
    • Las Globals con nombres Hasheados son comunes cuando las tablas se definen utilizando DDLs, es decir, CREATE TABLE. Este comportamiento puede modificarse especificando USEEXTENTSET y DEFAULTGLOBAL. El uso de globals con nombres hasheados y almacenar solo un índice por global ha demostrado beneficios en el rendimiento. Utilizo la siguiente consulta para listar los globales no evidentes en un espacio de nombres.
      • SQL para todas las Clases:
        SELECT Parent, DataLocation, IndexLocation, StreamLocation 
        FROM %Dictionary.StorageDefinition
        WHERE Parent->System = 0 AND DataLocation IS NOT NULL
      • SQL para Clases específicas:
        CALL %ExtentMgr.GlobalsUsed('Package.Class.cls')

    Determinación de la ruta de la base de datos:

    • Para las implementaciones más simples donde un namespace no tiene asignaciones globales adicionales para datos de aplicación, a menudo es posible sustituir "." por el directorio. Este truco sintáctico indicará a la API que busque en el directorio actual del namespace actual.
    • Para implementaciones orientadas a SQL, CREATE DATABASE sigue nuestras mejores prácticas y crea DOS bases de datos: una para el código y otra para los datos. Es recomendable verificar la base de datos predeterminada de globales para el espacio de nombres dado en el Portal de Gestión o en el CPF.
    • Es posible determinar programáticamente el directorio de destino para un global particular (o subíndice) en el namespace actual:  
      • ObjectScript:
        set global = "globalNameHere" 
        set directory = $E(##class(%SYS.Namespace).GetGlobalDest($NAMESPACE, global),2,*)
    • Para implementaciones más complejas con muchos mareos de globals, puede ser necesario iterar a través de Config.MapGlobals en el espacio de nombres %SYS y sumar los tamaños de los globales:
      • SQL: SELECT Namespace, Database, Name FROM Config.MapGlobals

    Determinación de tamaños globales:

    Una vez determinado el nombre del global y la ruta de la base de datos de destino, es posible recopilar información sobre el tamaño del global. Aquí tenéis algunas opciones:

    • Verificación de Integridad: Realizar verificaciones de integridad nocturnas es una buena práctica. Una práctica aún mejor es realizarlas contra una copia de seguridad restaurada para verificar también el proceso de copia de seguridad y restauración, al mismo tiempo que se descarga la E/S al otro sistema. Este proceso verifica la integridad física de los bloques de la base de datos leyendo cada bloque asignado. Muestra en una tabla el espacio asignado de todos los globals y también el promedio de empaquetado de los bloques a lo largo del camino.
      • Echa un vistazo a la excelente publicación de Ray sobre Integrity Check performance.
      • En IRIS 2022.1 y versiones posteriores, las Verificaciones de Integridad ahora pueden incluso procesar en múltiples procesos un único global.
      • Ejemplo de Salida de Verificación de Integridad:
        Global: Ens.MessageHeaderD                            0 errors found   
        Top Pointer Level:    # of blocks=1      8kb (2% full)   
        Pointer Level:        # of blocks=25      200kb (19% full)   
        Bottom Pointer Level: # of blocks=3,257      25MB (79% full)   
        Data Level:           # of blocks=2,630,922      20,554MB (88% full)   
        Total:                # of blocks=2,634,205      20,579MB (88% full)   
        Elapsed Time = 238.4 seconds, Completed 01/17/2023 23:41:12  
    • %Library.GlobalEdit.GetGlobalSize – Los siguientes APIs pueden utilizarse para determinar rápidamente el tamaño asignado de un único global. Esto aún puede llevar algún tiempo para globals de varios terabytes.
      • ObjectScript: w ##class(%Library.GlobalEdit).GetGlobalSize(directory, globalName, .allocated, .used, 1)
      • Python embebido:
        import iris 
        allocated = iris.ref("")
        used =iris.ref("")
        fast=1
        directory = "/path/to/database"
        global = "globalName"
        iris.cls('%Library.GlobalEdit').GetGlobalSize(directory, global, allocated, used, fast)
        allocated.value
        used.value
    • %Library.GlobalEdit.GetGlobalSizeBySubscript – Esto es útil para determinar el tamaño de un subíndice o un rango de subíndices. Por ejemplo, determinar el tamaño de un índice incluirá todos los descendientes dentro del rango especificado. Advertencia: a partir de IRIS 2023.1 no existe una opción rápida ("fast") para devolver solo el tamaño asignado. Leerá todos los bloques de datos dentro del rango especificado.
      • ObjectScript: ##class(%Library.GlobalEdit).GetGlobalSizeBySubscript(directory, startingNode, EndingNode, .size)
    • %SYS.GlobalQuery.Size – Esta API es útil para examinar múltiples globals dentro de una base de datos, ya sea con filtros o sin ellos. Hay disponible un Procedimiento Almacenado SQL para clientes que interactúan principalmente con IRIS a través de SQL.
      • SQL: CALL %SYS.GlobalQuery_Size('database directory here', '','*',,,1)
    • ^%GSIZE – Ejecutar esta utilidad ya clásica y seleccionar "mostrar detalles" leerá cada bloque de datos para determinar el tamaño de los datos. Sin filtrar la lista de globales, podría leer casi toda la base de datos bloque por bloque con un solo hilo.
      • Ejecutar ^%GSIZE con detalles es la opción más lenta para determinar los tamaños de los globales. ¡Es mucho más lento que nuestras Verificaciones de Integridad, que están altamente optimizadas!
      • Hay otro punto de entrada adicional que devolverá el tamaño asignado para un global específico, incluido cuando está limitado a un subíndice. Desafortunadamente, no funciona en rangos de subíndices.
      • ObjectScript: write $$AllocatedSize^%GSIZE("global(""subscript"")")
    • Tamaño de la base de datos – El caso más sencillo para determinar el tamaño de un global es cuando hay solo un global dentro de una base de datos única. Simplemente resta el espacio total libre dentro de la base de datos del tamaño total de la base de datos. El tamaño de la base de datos está disponible desde el sistema operativo o a través de SYS.Database. A menudo utilizo una variación de este enfoque para determinar el tamaño de un global desproporcionadamente grande al restar la suma de todos los demás globales en la base de datos.
      • ObjectScript: ##class(%SYS.DatabaseQuery).GetDatabaseFreeSpace(directory, .FreeSpace)
      • SQL: call %SYS.DatabaseQuery_FreeSpace()
      • Embedded Python:
      • import iris
        freeSpace = iris.ref("")
        directory = "/path/to/database"
        iris.cls('%SYS.DatabaseQuery').GetDatabaseFreeSpace(directory, freeSpace)
        freeSpace.value  
    • Los Globals Privados de Proceso (PPGs, por sus siglas en inglés) son globales especiales con un alcance limitado a un proceso y que son almacenados dentro de IRISTEMP. A menudo no son enumerados por otras herramientas. Cuando IRISTEMP se expande rápidamente o reporta poco espacio libre, los PPGs suelen ser la explicación. Considerad examinar el uso por proceso de PPGs a través de %SYS.ProcessQuery.  
      • SQL: SELECT PID, PrivateGlobalBlockCount FROM %SYS.ProcessQuery ORDER BY PrivateGlobalBlockCount DESC

    Preguntas para los lectores:

    1. ¿Con qué frecuencia seguís el tamaño de vuestros globales?
    2. ¿Qué hacéis con la información del tamaño de los globales?
    3. Para los usuarios centrados en SQL, ¿seguís el tamaño de los índices individuales?

     

    Como extra, os recuerdo que disponéis de un paquete muy útil llamado SQL Utilities (de Benjamin de Boe) que incorporan mucho de lo que se trata en este artículo y aprovechan todas las ventajas de las nuevas funcionalidades del estimador de tamaño de globals.

    Discussion (0)1
    Log in or sign up to continue
    Question
    · Jun 20, 2024

    rest api authentication

    How do you authenticate with a rest api? The rest api implemention allows us to add in the header Authentication: 'Basic ' + btoa(user + ':' + password) but it is not really secure as a user can inspect and with the right decoding tool see a user password

    4 Comments
    Discussion (4)1
    Log in or sign up to continue