Jump to content
 







Main menu
   


Navigation  



Main page
Contents
Current events
Random article
About Wikipedia
Contact us
Donate
 




Contribute  



Help
Learn to edit
Community portal
Recent changes
Upload file
 








Search  

































Create account

Log in
 









Create account
 Log in
 




Pages for logged out editors learn more  



Contributions
Talk
 



















Contents

   



(Top)
 


1 Technical overview  



1.1  Data organization and typing  





1.2  Database subsystem  





1.3  Language subsystem  







2 Platforms  





3 Licensing  





4 Common applications  





5 References  





6 Further reading  





7 External links  














GT.M






Български
Deutsch
Español

 

Edit links
 









Article
Talk
 

















Read
Edit
View history
 








Tools
   


Actions  



Read
Edit
View history
 




General  



What links here
Related changes
Upload file
Special pages
Permanent link
Page information
Cite this page
Get shortened URL
Download QR code
Wikidata item
 




Print/export  



Download as PDF
Printable version
 
















Appearance
   

 






From Wikipedia, the free encyclopedia
 


GT.M
Developer(s)FIS
Initial release1986; 38 years ago (1986)
Stable release

7.0-000 / February 12, 2021; 3 years ago (2021-02-12)

Repository
  • [cvs://anonymous:@fis-gtm.cvs.sourceforge.net/cvsroot/fis-gtm fis-gtm.cvs.sourceforge.net/cvsroot/fis-gtm] Edit this at Wikidata
Written inC, assembly, M
Operating systemLinux, AIX
TypeDatabase
LicenseAGPLv3, proprietary
Websitesourceforge.net/projects/fis-gtm/

GT.M is a high-throughput key–value database engine optimized for transaction processing. (It is a type also referred to as "schema-less", "schema-free", or "NoSQL".) GT.M is also an application development platform and a compiler for the ISO standard M language, also known as MUMPS.

GT.M, an abbreviation for Greystone Technology M, was developed by the Greystone Technology Corp in the 1980s. It is an implementation of ANSI standard M for AIX and Linux. In addition to preserving the traditional features of M, GT.M also offers an optimizing compiler that produces object code that does not require internal interpreters during execution.

The database engine, made open source in 2000,[1] is maintained by FIS. GT.M is used as the backend of their FIS Profile banking application,[2] and it powers banks in Spain, France, Italy, the Netherlands, Romania and India; Capital One 360 in the United States; Tangerine (Scotiabank) in Canada; Atom Bank;[3] Tandem Bank; Sainsbury's Bank;[4] Scottish Widows and Barclays Direct in the UK.[5] It is also used as an open source backend for the Electronic Health Record system WorldVistA and other open source EHRs such as Medsphere's OpenVista.[6] It is listed as an open source healthcare solution partner of Red Hat.[7] Today it consists of approximately 2 million lines of code.[needs update?]

Technical overview[edit]

GT.M consists of a language subsystem, a database subsystem, and utility programs. The language subsystem and database subsystem are closely integrated, but each is usable without the other. The language and database subsystems share common data organization and typing.

Data organization and typing[edit]

Like MUMPS, GT.M has no real concept of different data types, though strings (those which are not fully numeric) must be placed in quotes to differentiate them from variables. Numbers can be treated as strings of digits, or strings can be treated as numbers by numeric operators (coerced, in MUMPS terminology). Data is treated based on context and the rules of GT.M: 1+"42" yields the result 43, the first character of 43is4, and 20+"30 DUCKS"is50 (as non-numeric characters are dropped during numeric operations).[8]

There is only one data structure - multi-dimensional sparse arrays (key-value nodes, sub-trees, and associative memory are all equally valid descriptions) with up to 32 subscripts. A scalar can be thought of as an array element with zero subscripts. Nodes with varying numbers of subscripts (including one node with no subscripts) can freely co-exist in the same array. For example, if one wanted to represent the national capitals of the United States:

Set Capital("United States")="Washington"
Set Capital("United States",1774,1776)="Philadelphia"
Set Capital("United States",1776,1777)="Baltimore"

Variables are created on demand when first assigned to. Thus, the first Set command above would create the variable Capital. Variables have scope in the language, and are called local variables. A database access looks like an array access, for example:

Set ^Capital("United States")="Washington"

but the caret (^) means that it is a database access. Variables used for database access have a single global scope, and of course persist and shared between processes. They are called global variables. The first 31 characters of a variable name are significant.

The Kill and ZKill commands are used to delete subtrees of values.

GT.M uses Unicode (ISO/IEC-10646) for international character set support.

Database subsystem[edit]

The logical database of a GT.M process consists of one or more global variable name spaces, each consisting of unlimited number of global variables. For each global variable name space, a global directory maps global variables to the database files where they actually reside. An unlimited number of global variables can fit within one database file; a global variable must fit in one database file.

A database file consists of up to 224M (276,168,704) database blocks. A database block is a multiple of 512 bytes, with a maximum size of 65,024 bytes. Commonly used block sizes are 4KB, 8KB and 16KB - so, with an 8KB block size, an individual global variable can grow to 1,792GB. A global variable node (global variable, subscripts plus value) must fit in one database block and each block has a 16 byte overhead. So, the largest node that will fit in a database with a 4KB block size is 4,080 bytes. A key (global variable plus subscripts) can be up to 255 bytes.

The database engine is daemonless and processes accessing the database operate with normal user and group ids - a process has access to a database file if and only if the ownership and permissions of that database file (plus any layered access control such as SELinux) permits access. Each process has within its address space all the logic needed to manage the database, and processes cooperate with one another to manage database files. When a database file is journaled, updates are written to journal files before being written to database files, and in the event of a system crash, database files can be recovered from journal files.

The database engine also supports transaction processing. So, code such as:

TStart ()
 Set ^Capital("France")="Paris"
 Set ^Country("Paris")="France"
TCommit

implements an ACID transaction. GT.M uses optimistic concurrency control to manage transactions.

A plug-in architecture allows the database to be encrypted in order to protect data at rest. GT.M is distributed with reference plug-in that uses GnuPG.

Language subsystem[edit]

Unlike the database where global variable nodes must fit within a database block, local variable strings can grow to 1MB. The GT.M run-time provides dynamic storage allocation with garbage collection. The number of local variables and the number of nodes in local variables are limited only by storage available to the process. The default scope of a local variable is the lifetime of a process. Local variables created within routines using the New command have more limited scope.

GT.M routines are dynamically compiled and linked for execution in the address space of each process. With the exception of the 32-bit implementation of GT.M for the x86 Linux platform, object modules can also be placed in shared libraries with the standard ld command, in which case the memory used is shared. This is important because an application such as VistA has over 20,000 routines whose compiled object code exceeds 200MB. A large hospital running VistA can have thousands of concurrently running user processes.

With a couple of small exceptions, GT.M includes a nearly complete implementation of ISO standard M (affectionately known as MUMPS for historical reasons).

In GT.M, M code can freely call out to C code (or code in other languages with a C compatible interface), and C code can freely call in to M code (so the top level program can be a C main()). For example, is a GT.M module in CPAN, m_python for access from PythonorEGTM binding for Erlang.

Web services written in GT.M can be deployed under an Internet super server such as inetdorxinetd. Web-enabled applications can use layered software such as EWDorCFMumps.

Platforms[edit]

GT.M is fully supported on the following platforms:[9]

GT.M is no longer supported on these platforms:

The code base for GT.M on LinuxonIA-32 (x86) includes changes needed to run on CygwinonMicrosoft Windows but this is not a supported platform.

Licensing[edit]

OnLinuxonx86-64 & IA-32 (x86), and on OpenVMSonAlpha/AXP, GT.M is released as Free / Open Source Software (FOSS) under the terms of the GNU Affero General Public License, version 3. On other platforms, it is available under proprietary licenses.

Common applications[edit]

GT.M is predominantly used in healthcare and financial services industry. The first production use of GT.M was in 1986 at the Elvis Presley Memorial Trauma Center in Memphis, Tennessee. Through FIS Profile, it powers banks in the United States, Canada, Spain, France and Italy.

SQL and ODBC access to GT.M databases exists as separate commercial products.[11]

References[edit]

  1. ^ "Linux PR: Sanchez Offers GT.M Database as Open Source Freeware to Linux Users". December 9, 2000. Archived from the original on 2000-12-09.
  • ^ "Profile Benchmark Results" (PDF). redhat.com. Retrieved 9 July 2023.
  • ^ "UK challenger banks: who's who (and what's their tech)". FinTech Futures. May 30, 2018.
  • ^ "Sainsbury's Bank suffers systems outage – IBS Intelligence". Archived from the original on 2019-10-13.
  • ^ http://www.allbusiness.com/banking-finance/banking-lending-credit-services-cash/6129691-1.html [dead link]
  • ^ "Medical Record Applications". Archived from the original on 2011-06-08. Retrieved 2010-01-07.
  • ^ "Open source technologies for the enterprise". www.redhat.com.
  • ^ "GT.M Programmer's Guide - Data Types".
  • ^ "GT.M V6.3-009 Release Notes". tinco.pair.com.
  • ^ "Port to Linux on ARM · Issue #61 · YottaDB/YDB". GitHub.
  • ^ "Comparing Database Management Systems: MySQL, PostgreSQL, MSSQL Server, MongoDB, Elasticsearch, and others". AltexSoft. Retrieved 2023-09-08.
  • Further reading[edit]

    External links[edit]


    Retrieved from "https://en.wikipedia.org/w/index.php?title=GT.M&oldid=1232201200"

    Categories: 
    MUMPS implementations
    Free database management systems
    Structured storage
    FIS (company)
    Electronic health record software
    Software using the GNU AGPL license
    Hidden categories: 
    All articles with dead external links
    Articles with dead external links from February 2022
    Articles lacking reliable references from December 2011
    All articles lacking reliable references
    Articles containing potentially dated statements from November 2019
    All articles containing potentially dated statements
    Articles lacking reliable references from November 2019
    Articles needing additional references from November 2019
    All articles needing additional references
    Wikipedia articles that are too technical from November 2019
    All articles that are too technical
     



    This page was last edited on 2 July 2024, at 14:02 (UTC).

    Text is available under the Creative Commons Attribution-ShareAlike License 4.0; additional terms may apply. By using this site, you agree to the Terms of Use and Privacy Policy. Wikipedia® is a registered trademark of the Wikimedia Foundation, Inc., a non-profit organization.



    Privacy policy

    About Wikipedia

    Disclaimers

    Contact Wikipedia

    Code of Conduct

    Developers

    Statistics

    Cookie statement

    Mobile view



    Wikimedia Foundation
    Powered by MediaWiki