Articulo de referencia

GT.M

GT.M es un motor de base de datos clave-valor de alto rendimiento optimizado para el procesamiento de transacciones . (También se le conoce como "sin esquema", "libre de esquema...

GT.M es un motor de base de datos clave-valor de alto rendimiento optimizado para el procesamiento de transacciones . (También se le conoce como "sin esquema", "libre de esquema" o " NoSQL "). GT.M es además una plataforma de desarrollo de aplicaciones y un compilador para el lenguaje M estándar ISO , también conocido como MUMPS .

GT.M, abreviatura de Greystone Technology M, fue desarrollado por Greystone Technology Corp. en la década de 1980. Se trata de una implementación del estándar ANSI M para AIX y Linux . Además de conservar las características tradicionales de M, GT.M también ofrece un compilador optimizador que genera código objeto que no requiere intérpretes internos durante su ejecución.

El motor de base de datos, que se convirtió en código abierto en 2000, [ 1 ] es mantenido por FIS . GT.M se utiliza como backend de su aplicación bancaria FIS Profile , [ 2 ] y da soporte a bancos en España , Francia , Italia , Países Bajos , Rumania e India ; Capital One 360 ​​en Estados Unidos; Tangerine (Scotiabank) en Canadá; Atom Bank ; [ 3 ] Tandem Bank ; Sainsbury's Bank ; [ 4 ] Scottish Widows y Barclays Direct en el Reino Unido. [ 5 ] También se utiliza como backend de código abierto para el sistema de historia clínica electrónica WorldVistA y otros EHR de código abierto como OpenVista de Medsphere. [ 6 ] Está incluido como socio de soluciones de atención médica de código abierto de Red Hat . [ 7 ] Consta de aproximadamente 2 millones de líneas de código.

Descripción general técnica

GT.M consta de un subsistema de lenguaje, un subsistema de base de datos y programas de utilidad. Ambos subsistemas están estrechamente integrados, pero pueden utilizarse independientemente del otro. Comparten una organización y tipificación de datos comunes.

Organización y tipificación de datos

Al igual que MUMPS, GT.M no tiene un concepto real de diferentes tipos de datos, aunque las cadenas (aquellas que no son completamente numéricas) deben colocarse entre comillas para diferenciarlas de las variables. Los números pueden tratarse como cadenas de dígitos, o las cadenas pueden tratarse como números mediante operadores numéricos (coerción, en la terminología de MUMPS). Los datos se tratan en función del contexto y las reglas de GT.M: 1+"42"produce el resultado 43, el primer carácter de 43es 4, y 20+"30 DUCKS"es 50(ya que los caracteres no numéricos se descartan durante las operaciones numéricas). [ 8 ]

Solo existe una estructura de datos: matrices dispersas multidimensionales (nodos clave-valor, subárboles y memoria asociativa son descripciones igualmente válidas) con hasta 32 subíndices. Un escalar puede considerarse como un elemento de la matriz con cero subíndices. Los nodos con diferente número de subíndices (incluido un nodo sin subíndices) pueden coexistir libremente en la misma matriz. Por ejemplo, si se quisiera representar las capitales nacionales de los Estados Unidos :

Establecer capital ("Estados Unidos")="Washington" Establecer capital ("Estados Unidos",1774,1776)="Filadelfia" Establecer capital ("Estados Unidos",1776,1777)="Baltimore" 

Las variables se crean bajo demanda cuando se les asignan por primera vez. Por lo tanto, el primer comando Set anterior crearía la variable Capital. Las variables tienen ámbito en el lenguaje y se denominan variables locales . Un acceso a la base de datos se parece a un acceso a un array, por ejemplo:

Establecer ^Capital("Estados Unidos")="Washington" 

pero el acento circunflejo (^) indica que se trata de un acceso a la base de datos. Las variables utilizadas para el acceso a la base de datos tienen un ámbito global único y, por supuesto, persisten y se comparten entre procesos. Se denominan variables globales . Los primeros 31 caracteres del nombre de una variable son importantes.

Los comandos Kill y ZKill se utilizan para eliminar subárboles de valores.

GT.M utiliza Unicode ( ISO/IEC-10646 ) para la compatibilidad con conjuntos de caracteres internacionales.

Subsistema de base de datos

La base de datos lógica de un proceso GT.M consta de uno o más espacios de nombres de variables globales , cada uno con un número ilimitado de variables globales. Para cada espacio de nombres de variables globales, un directorio global asigna las variables globales a los archivos de base de datos donde residen. Un número ilimitado de variables globales puede caber en un archivo de base de datos; cada variable global debe caber en un único archivo de base de datos.

Un archivo de base de datos consta de hasta 224M (276.168.704) bloques de base de datos. Un bloque de base de datos es un múltiplo de 512 bytes, con un tamaño máximo de 65.024 bytes. Los tamaños de bloque más comunes son 4 KB, 8 KB y 16 KB; por lo tanto, con un tamaño de bloque de 8 KB, una variable global individual puede crecer hasta 1.792 GB. Un nodo de variable global (variable global, subíndices más valor) debe caber en un bloque de base de datos y cada bloque tiene una sobrecarga de 16 bytes. Por lo tanto, el nodo más grande que cabe en una base de datos con un tamaño de bloque de 4 KB es de 4.080 bytes. Una clave (variable global más subíndices) puede tener hasta 255 bytes.

El motor de base de datos no utiliza demonios y los procesos que acceden a ella operan con identificadores de usuario y grupo normales. Un proceso tiene acceso a un archivo de base de datos solo si la propiedad y los permisos de dicho archivo (junto con cualquier control de acceso por capas, como SELinux ) lo permiten. Cada proceso dispone, dentro de su espacio de direcciones, de toda la lógica necesaria para gestionar la base de datos, y los procesos cooperan entre sí para gestionar los archivos de base de datos. Cuando se registran las transacciones de un archivo de base de datos, las actualizaciones se escriben en los archivos de registro antes de escribirse en los archivos de base de datos, y en caso de un fallo del sistema, los archivos de base de datos pueden recuperarse a partir de los archivos de registro.

El motor de base de datos también admite el procesamiento de transacciones . Por lo tanto, código como este:

TStart()  Establecer ^Capital("Francia")="París"  Establecer ^País("París")="Francia" TCommit

Implementa una transacción ACID . GT.M utiliza control de concurrencia optimista para gestionar las transacciones.

Una arquitectura de complementos permite cifrar la base de datos para proteger los datos en reposo. GT.M se distribuye con un complemento de referencia que utiliza GnuPG .

subsistema de lenguaje

A diferencia de las bases de datos, donde los nodos de variables globales deben caber dentro de un bloque, las cadenas de variables locales pueden alcanzar hasta 1 MB. El entorno de ejecución GT.M proporciona asignación dinámica de memoria con recolección de basura. El número de variables locales y el número de nodos en las variables locales solo están limitados por la memoria disponible para el proceso. El alcance predeterminado de una variable local es la vida útil del proceso. Las variables locales creadas dentro de rutinas mediante el comando New tienen un alcance más limitado.

Las rutinas GT.M se compilan y enlazan dinámicamente para su ejecución en el espacio de direcciones de cada proceso. A excepción de la implementación de GT.M de 32 bits para la plataforma Linux x86, los módulos objeto también pueden ubicarse en bibliotecas compartidas con el ldcomando estándar, en cuyo caso la memoria utilizada es compartida. Esto es importante porque una aplicación como VistA tiene más de 20 000 rutinas cuyo código objeto compilado supera los 200 MB. Un gran hospital que ejecuta VistA puede tener miles de procesos de usuario ejecutándose simultáneamente.

Salvo un par de pequeñas excepciones, GT.M incluye una implementación casi completa del estándar ISO M (conocido cariñosamente como MUMPS por razones históricas).

En GT.M, el código M puede llamar libremente al código C (o al código en otros lenguajes con una interfaz compatible con C), y el código C puede llamar libremente al código M (de modo que el programa de nivel superior puede ser un C main()). Por ejemplo, es un módulo GT.M en CPAN , m_python Archivado el 31-03-2010 en Wayback Machine para acceso desde Python o enlace EGTM para Erlang .

Los servicios web escritos en GT.M se pueden implementar bajo un super servidor de Internet como inetd o xinetd . Las aplicaciones habilitadas para la web pueden usar software en capas como EWD (archivado el 8 de enero de 2010 en Wayback Machine) o CFMumps .

Plataformas

GT.M es totalmente compatible con las siguientes plataformas: [ 9 ]

GT.M ya no es compatible con estas plataformas:

  • HP-UX a partir de octubre de 2015 (V6.2-002A)
  • OpenVMS a diciembre de 2014 (V6.2-001)
  • Solaris a diciembre de 2015 (V6.2-002A)

El código fuente de GT.M en Linux en IA-32 ( x86 ) incluye los cambios necesarios para ejecutarse en Cygwin en Microsoft Windows , pero esta no es una plataforma compatible.

Licencias

En Linux para arquitecturas x86-64 e IA-32 ( x86 ), y en OpenVMS para Alpha/AXP , GT.M se distribuye como software libre/de código abierto (FOSS) bajo los términos de la Licencia Pública General Affero de GNU, versión 3. En otras plataformas, está disponible bajo licencias propietarias.

Aplicaciones comunes

GT.M se utiliza principalmente en los sectores de salud y servicios financieros. Su primer uso en producción tuvo lugar en 1986 en el Centro de Traumatología Memorial Elvis Presley en Memphis, Tennessee . A través de FIS Profile , presta servicios a bancos en Estados Unidos, Canadá, España, Francia, Italia, Vietnam y Tailandia.

El acceso SQL y ODBC a las bases de datos GT.M existe como productos comerciales separados. [ 11 ]

Referencias

  1. "Comunicado de prensa de Linux: Sánchez ofrece la base de datos GT.M como software libre de código abierto para usuarios de Linux" . 9 de diciembre de 2000. Archivado del original el 9 de diciembre de 2000.
  2. "Resultados de la prueba de rendimiento del perfil" (PDF) . redhat.com . Consultado el 9 de julio de 2023 .
  3. "Bancos emergentes del Reino Unido: quién es quién (y cuál es su tecnología)" . FinTech Futures . 30 de mayo de 2018.
  4. "Sainsbury's Bank sufre una interrupción en sus sistemas – IBS Intelligence" . Archivado del original el 13 de octubre de 2019.
  5. http://www.allbusiness.com/banking-finance/banking-lending-credit-services-cash/6129691-1.html
  6. "Solicitudes de historial médico" . Archivado del original el 8 de junio de 2011. Consultado el 7 de enero de 2010 .
  7. " Tecnologías de código abierto para la empresa" . www.redhat.com
  8. "Guía del programador de GT.M - Tipos de datos" .
  9. "Notas de la versión GT.M V6.3-009" . tinco.pair.com .
  10. "Port a Linux en ARM · Problema n.° 61 · YottaDB/YDB" . GitHub .
  11. "Comparación de sistemas de gestión de bases de datos: MySQL, PostgreSQL, MSSQL Server, MongoDB, Elasticsearch y otros" . AltexSoft . Consultado el 8 de septiembre de 2023 .

Lecturas adicionales

  • Ignacio Valdés (17 de noviembre de 2002), KS Bhaskar recibe el premio LMN Achievement Award 2002 , linuxmednews.com
  • Página del proyecto en SourceForge
  • Documentación de GT.M
  • YottaDB , una bifurcación de GT.M
  • EGTM: Enlace GT.M para Erlang
  • nodem: Enlace GT.M para Node.js