#Multimodelo

0 Seguidores · 11 Publicaciones

Una base de datos multimodelo está diseñada para respaldar varios modelos de datos con un solo backend integrado. Los modelos de datos clave-valor, relacionales, de gráficas y documentos son ejemplos de los modelos de datos que pueden obtener respaldo con una base de datos multimodelo.

Encontrará más información aquí.

Artículo Iryna Mykhailova · ago 28, 2025 4m read

El artículo de la August Article Bounty en Global Masters llamó mi atención, y uno de los temas propuestos me pareció bastante interesante para tratarlo. Así que esto es lo que me gustaría contarles a mis estudiantes sobre las tablas en IRIS y cómo se relacionan con el modelo de objetos.

Ante todo, InterSystems IRIS cuenta con un modelo de datos unificado. Esto significa que, cuando trabajáis con datos, no estáis atados a un único paradigma. Los mismos datos pueden ser accedidos y manipulados como una tabla SQL tradicional, como un objeto nativo o incluso como un array multidimensional (un global).

Esto quiere decir que, cuando creáis una tabla en SQL, IRIS genera automáticamente una clase de objeto correspondiente. Y, cuando definís una clase de objeto, IRIS la pone automáticamente a disposición como una tabla SQL. Los datos en sí mismos se almacenan una sola vez en el motor de almacenamiento multidimensional de IRIS, que es muy eficiente. El motor SQL y el motor de objetos son simplemente diferentes “lentes” para ver y trabajar con los mismos datos.

Primero, veamos la correlación entre el modelo relacional y el modelo de objetos:

Relacional Objeto
Tabla Clase
Columna Propiedad
Fila Objeto
Clave primaria Identificador de objeto

No siempre hay una correlación 1:1, ya que podéis tener varias tablas que representen una misma clase, por ejemplo. Pero es una regla general.

0
1 28
Artículo Ricardo Paiva · mar 17, 2025 6m read

InterSystems ha estado a la vanguardia de la tecnología de bases de datos desde su creación, siendo pionera en innovaciones que superan constantemente a competidores como Oracle, IBM y Microsoft. Al centrarse en un diseño eficiente del núcleo y adoptar un enfoque sin concesiones en el rendimiento de los datos, InterSystems se ha hecho un hueco en las aplicaciones de misión crítica, garantizando fiabilidad, velocidad y escalabilidad.

Una historia de excelencia técnica

0
0 62
Artículo Ricardo Paiva · jul 25, 2023 9m read

Antes de empezar a hablar de bases de datos y de los distintos modelos de datos que existen, primero explicaré qué es una base de datos y cómo se utiliza.

Una base de datos es una colección organizada de datos, almacenados y accesibles de forma electrónica. Se utiliza para almacenar y recuperar datos estructurados, semiestructurados o sin procesar, que normalmente están relacionados con un tema o una actividad.

En el corazón de toda base de datos hay al menos un modelo utilizado para describir sus datos. Y según el modelo que utilice, una base de datos puede tener características ligeramente diferentes y almacenar distintos tipos de datos.

Para escribir, recuperar, modificar, ordenar, transformar o imprimir la información de la base de datos, se utiliza un software llamado Sistema de Gestión de Bases de Datos (DBMS, por sus siglas en inglés).

El tamaño, la capacidad y el rendimiento de las bases de datos y sus respectivos DBMS ha aumentado de forma significativa. Esto ha sido posible gracias a los avances tecnológicos en varios ámbitos, como los procesadores, la memoria y almacenamiento de los ordenadores y las redes informáticas. En general, el desarrollo de la tecnología de bases de datos puede dividirse en cuatro generaciones basadas en los modelos o la estructura de los datos: navegacional, relacional, de objetos y post-relacionales.

A diferencia de las tres primeras generaciones, que se caracterizan por un modelo de datos específico, la cuarta generación incluye muchas bases de datos diferentes basadas en distintos modelos, como columnas, gráficos, documentos, componentes, multidimensiones, clave-valor, almacenamiento en memoria, etc. Todas estas bases de datos están unidas por un único nombre NoSQL (NoSQL o ahora es más preciso decir No sólo SQL).

Además, ahora aparece una nueva clase, que se llama NewSQL. Se trata de bases de datos relacionales modernas que tienen como objetivo ofrecer el mismo rendimiento escalable que los sistemas NoSQL para cargas de trabajo de procesamiento de transacciones en línea (lectura-escritura), a la vez que utilizan SQL y mantienen ACID.

Por casualidad, entre estas bases de datos de cuarta generación se encuentran las que admiten los modelos de datos múltiples mencionados anteriormente. Se llaman bases de datos multimodelo. Un buen ejemplo de este tipo de base de datos es InterSystems IRIS. Por ello, la utilizaré para dar ejemplos de distintos tipos de modelos, según vayan presentándose.

<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" src="https://www.youtube.com/embed/EAOfw09xTrM" title="YouTube video player" width="560" height="315" frameborder="0"></iframe>

La primera generación de bases de datos utilizaba modelos jerárquicos o modelos en red. El núcleo de los primeros es una estructura en forma de árbol en la que cada registro tiene un solo propietario. Podéis ver cómo funciona utilizando el ejemplo de InterSystems IRIS, porque su modelo principal es jerárquico y todos los datos se almacenan en globals (que son árboles B). Podéis leer más sobre los globals aquí.

Podemos crear este árbol en IRIS:

Set^a("+7926X", "city") = "Moscow"Set^a("+7926X", "city", "street") = "Req Square"Set^a("+7926X", "age") = 25Set^a("+7916Y", "city") = "London"Set^a("+7916Y", "city", "street") = "Baker Street"Set^a("+7916Y", "age") = 36

Y verlo en la base de datos:

Después, Edgar F. Codd propuso su álgebra relacional y su teoría del almacenamiento de datos, basada en principios relacionales, en 1969. Y tras ello se crearon las bases de datos relacionales. El uso de relaciones (tablas), atributos (columnas), tuplas (filas) y, lo que es más importante, transacciones y requisitos ACID, hizo que estas bases de datos fueran muy populares y lo siguen siendo ahora.

Por ejemplo, tenemos el siguiente esquema:

Podemos crear y completar tablas:

Y si escribimos la consulta:

select p.ID, p.Name, a.Country, A.City
  from My.Person p left join My.Address a
    on p.Address = a.ID

recibiremos la respuesta:

A pesar de las significativas ventajas de las bases de datos relacionales, con la difusión de los lenguajes de objetos se hizo necesario almacenar datos orientados a objetos en bases de datos. Por eso, en los años 90 aparecieron las primeras bases de datos orientadas a objetos y objeto-relacionales. Estas últimas se crearon a partir de bases de datos relacionales y añadiéndole complementos para simular el trabajo con objetos. Las primeras se desarrollaron desde cero a partir de las recomendaciones del consorcio OMG (Object Management Group) y después del ODMG (Object Data Management Group).

Las ideas clave de estas bases de datos orientadas a objetos son las siguientes.

El almacén de datos único es accesible usando:

  • object definition language - schema definition, permite definir clases, sus atributos, relaciones y métodos
  • object-query language - declarative, es un lenguaje similar a SQL, que permite obtener objetos de la base de datos
  • object manipulation language - permite modificar y guardar datos en la base de datos, admite transacciones y la invocación de métodos.

Este modelo permite obtener datos de bases de datos mediante lenguajes orientados a objetos.

Si tomamos la misma estructura que en el ejemplo anterior, pero en la forma orientada a objetos, tendremos las siguientes clases:

Class My.Person Extends%Persistent
{
Property Name As%Name;Property Address As My.Address;
}
Class My.Address Extends%Persistent
{
Property Country;Property City;
}

Y podemos crear los objetos utilizando el lenguaje orientado a objetos:

 set address = ##class(My.Address).%New()
 set address.Country = "France"
 set address.City = "Marseille"
 do address.%Save()
 set person = ##class(My.Person).%New()
 set person.Address = address
 set person.Name = "Quouinaut, Martin"
 do person.%Save()

Desafortunadamente, las bases de datos de objetos no lograron competir con las bases de datos relacionales a pesar de su posición dominante, y como resultado, surgieron muchos ORM.

En cualquier caso, con la expansión de Internet en la década de los 2000 y la aparición de nuevos requisitos para el almacenamiento de datos, empezaron a surgir otros modelos de datos y DBMS. Dos de estos modelos que se utilizan en IRIS son los de documentos y columnas.

Las bases de datos orientadas a documentos se utilizan para gestionar datos semiestructurados. Se trata de datos que no siguen una estructura fija y llevan la estructura dentro. Cada unidad de información en una base de datos de este tipo es un par simple: una clave y un documento específico. Este documento normalmente tiene un formato JSON y contiene la información. Como la base de datos no requiere un esquema particular, también es posible integrar distintos tipos de documentos en el mismo almacén.

Si tomamos el ejemplo anterior, podemos tener documentos como estos:

{
   "Name":"Quouinaut, Martin",
   "Address":{
      "Country":"France",
      "City":"Paris"
   }
}
{
   "Name":"Merlingue, Luke",
   "Address":{
      "Country":"France",
      "City":"Nancy"
   },
   "Age":26
}

Estos dos documentos con un distinto número de campos se almacenan en la base de datos de IRIS sin ningún problema.

Y el último ejemplo de un modelo que estará disponible en la versión 2022.2 es el modelo de columnas. En este caso, el DBMS almacena las tablas de datos por columnas y no por filas.

La orientación por columnas permite un acceso más eficiente a los datos para consultar un subconjunto de columnas (eliminando la necesidad de leer columnas que no son relevantes), y más opciones para comprimir datos. Asimismo, comprimir por columnas es más eficaz cuando los datos de la columna son similares. No obstante, generalmente son menos eficaces para insertar nuevos datos.

Podéis crear esta tabla:

Create Table My.Address (
  city varchar(50),
  zip varchar(5),
  country varchar(15)
) WITH STORAGETYPE = COLUMNAR

En este caso, la clase es la siguiente:

 
Spoiler
 
Class My.Address Extends%Persistent [ ClassType = persistent, DdlAllowed, Final, Owner = {UnknownUser}, ProcedureBlock, SqlRowIdPrivate, SqlTableName = Address ]
{
Property city As%Library.String(COLLATION = "EXACT", MAXLEN = 50) [ SqlColumnNumber = 2 ];Property zip As%Library.String(COLLATION = "EXACT", MAXLEN = 5) [ SqlColumnNumber = 3 ];Property country As%Library.String(COLLATION = "EXACT", MAXLEN = 15) [ SqlColumnNumber = 4 ];Parameter STORAGEDEFAULT = "columnar";Parameter USEEXTENTSET = 1;/// Bitmap Extent Index auto-generated by DDL CREATE TABLE statement.  Do not edit the SqlName of this index.
Index DDLBEIndex [ Extent, SqlName = "%%DDLBEIndex", Type = bitmap ];
Storage Default
{
<Data name="_CDM_city">
<Attribute>city</Attribute>
<ColumnarGlobal>^q3AW.DZLd.1.V1</ColumnarGlobal>
<Structure>vector</Structure>
</Data>
<Data name="_CDM_country">
<Attribute>country</Attribute>
<ColumnarGlobal>^q3AW.DZLd.1.V2</ColumnarGlobal>
<Structure>vector</Structure>
</Data>
<Data name="_CDM_zip">
<Attribute>zip</Attribute>
<ColumnarGlobal>^q3AW.DZLd.1.V3</ColumnarGlobal>
<Structure>vector</Structure>
</Data>
<DataLocation>^q3AW.DZLd.1</DataLocation>
<ExtentLocation>^q3AW.DZLd</ExtentLocation>
<ExtentSize>3</ExtentSize>
<IdFunction>sequence</IdFunction>
<IdLocation>^q3AW.DZLd.1</IdLocation>
<Index name="DDLBEIndex">
<Location>^q3AW.DZLd.2</Location>
</Index>
<Index name="IDKEY">
<Location>^q3AW.DZLd.1</Location>
</Index>
<IndexLocation>^q3AW.DZLd.I</IndexLocation>
<Property name="%%ID">
<AverageFieldSize>3</AverageFieldSize>
<Selectivity>1</Selectivity>
</Property>
<Property name="city">
<AverageFieldSize>7</AverageFieldSize>
<Selectivity>33.3333%</Selectivity>
</Property>
<Property name="country">
<AverageFieldSize>7</AverageFieldSize>
<Selectivity>33.3333%</Selectivity>
</Property>
<Property name="zip">
<AverageFieldSize>7</AverageFieldSize>
<Selectivity>33.3333%</Selectivity>
</Property>
<SQLMap name="%%DDLBEIndex">
<BlockCount>-4</BlockCount>
</SQLMap>
<SQLMap name="IDKEY">
<BlockCount>-4</BlockCount>
</SQLMap>
<SQLMap name="_CDM_city">
<BlockCount>-4</BlockCount>
</SQLMap>
<SQLMap name="_CDM_country">
<BlockCount>-4</BlockCount>
</SQLMap>
<SQLMap name="_CDM_zip">
<BlockCount>-4</BlockCount>
</SQLMap>
<StreamLocation>^q3AW.DZLd.S</StreamLocation>
<Type>%Storage.Persistent</Type>
}
}
 

Después insertamos los datos:

insert into My.Address values ('London', '47000', 'UK')
insert into My.Address values ('Paris', '54000', 'France')
insert into My.Address values ('Kyiv', '03000', 'Ukraine')

En los globals podemos ver:

Si abrimos el global con los nombres de las ciudades, podremos ver:

Y si escribimos una consulta:

select City
  from My.Address

recibimos los datos:

En este caso, el DBMS se limita únicamente a leer un global para obtener el resultado completo. Además, ahorra tiempo y recursos en la lectura.

Así pues, hemos hablado de 5 modelos de datos diferentes compatibles con la base de datos InterSystems IRIS: los modelos jerárquicos, relacionales, de objetos, de documentos y de columnas.

Espero que este artículo os resulte útil para saber qué modelos están disponibles. Si tenéis alguna pregunta, podéis escribirla en los comentarios.

2
0 427
InterSystems Official Jose-Tomas Salvador · feb 22, 2023

Comenzando este año 2023, hemos programado una serie de cursos oficiales sobre InterSystems IRIS que iremos realizando a lo largo del año. Los cursos se impartirán on-line y ya están abiertos para que os podáis registrar si estáis interesados (hasta un máximo de 10 personas por curso, quorum mínimo 5 asistentes). Toda la información está disponible en nuestro sitio web: Formación en el aula virtual | InterSystems

0
0 118
Artículo Rob Tweed · ene 7, 2022 2m read

Para aquellos que sois nuevos en IRIS, e incluso para los que habéis utilizado Cache o IRIS durante un tiempo pero queréis explorar más allá de los límites y prácticas normalmente admitidos, puede que os guste bucear en esta investigación detallada del motor de la base de datos, situado en su centro, y descubrir lo que realmente podéis hacer con él, yendo más allá de lo que InterSystems ha hecho con él por vosotros. 

0
0 133
Artículo Ricardo Paiva · sep 16, 2021 3m read

Como ayuda para aquellos que quieren utilizar las funciones de la Base de datos documental (DocDB) dentro de InterSystems IRIS, y específicamente la API REST que proporciona, reuní una ColecciónPostman que ofrece muestras para varias llamadas básicas.

Por ejemplo:

En el ejemplo se utilizan documentos de "Color", por ejemplo, Rojo, Azul, etc., utilizando una estructura JSON de muestra desde [aquí](https://www.sitepoint.com/colors-json-example/).

La Colección incluye llamadas de diferentes "categorías":

  • Crear metadatos: crear la base de datos y las propiedades relacionadas
  • Obtener metadatos: entender qué bases de datos y propiedades están definidas
  • CUD: crear/actualizar/eliminar documentos
  • Buscar y obtener documentos: recuperar documentos según el ID o ciertos valores o criterios
  • Eliminar metadatos: eliminar propiedades o bases de datos

El orden de las solicitudes en la Colección tiene cierta lógica interna (por ejemplo, primero crear la base de datos y las propiedades, luego insertar algunos datos y después recuperarlos), pero por supuesto puedes utilizarlos en el orden o los cambios que desees.

El orden también funciona bien si se ejecuta Collection Runner de Postman. Añadí algunos scripts de prueba básicos, que permiten que Postman muestre el estado Aprobado o Fallido para cada llamada.

Por ejemplo:

Ten en cuenta que la última llamada elimina todas las bases de datos de documentos dentro de un Namespace, así que no ejecutes esto a menos que realmente quieras hacerlo... no lo hagas manualmente y tampoco como parte de la ejecución de toda la Colección.

Para conseguir que las llamadas funcionen en varios entornos, utilicé la función variables de Postman.

Esto permite cambiar el nombre/la IP del servidor, el puerto y el namespace -

Así que cada llamada se parece a esto:

Seguramente también necesitarás adaptar la parte de autenticación.

Actualmente tengo "Basic Authentication" simplemente con "SuperUser" y "sys":

  Solo para añadir un cambio "multimodelo" a esto, aquí también hay un ejemplo de acceso a estos datos a través de SQL:

Esta es la estructura de la tabla (como se ve en la extensión SQL Tools en VSCode):

Este es un resultado SELECT sencillo:

Y aquí hay un SELECT con una cláusula WHERE sobre una de las propiedades que definimos:

0
0 329
Anuncio Esther Sanchez · feb 26, 2020

¡Hola Comunidad!

Os traemos el primer episodio de nuestro nuevo podcast (Data Points), que trata sobre lo que es InterSystems IRIS en conjunto. Fue un placer charlar 15 minutos con @Jenny Ames sobre lo que hace diferente a IRIS. Y también nos contó los mejores usos de la tecnología de InterSystems que ella ha visto en todos sus años trabajando como formadora primero y como desarrolladora de contenido online después.

Puedes escuchar el podcast dandole a Play o entrando en la web de Data Points: datapoints.intersystems.com

0
0 147