GT.M - это высокопроизводительный механизм базы данных « ключ-значение», оптимизированный для обработки транзакций . (Это тип, также называемый «без схемы», «без схемы» или « NoSQL» .) GT.M также является платформой разработки приложений и компилятором для стандартного языка M ISO , также известного как MUMPS. .
Разработчики) | FIS |
---|---|
Первый выпуск | 1986 |
Стабильный выпуск | 7.0-000 / 12 февраля 2021 г . |
Репозиторий |
|
Написано в | C , сборка , M |
Операционная система | Linux , AIX |
Тип | База данных |
Лицензия | GNU AGPLv3 , проприетарный |
Веб-сайт | sourceforge |
GT.M, сокращение от Greystone Technology M, было разработано корпорацией Greystone Technology Corp в 1980-х годах. Это реализация стандарта M ANSI для AIX и Linux . В дополнение к сохранению традиционных функций M, GT.M также предлагает оптимизирующий компилятор, который создает объектный код, который не требует внутренних интерпретаторов во время выполнения.
Механизм базы данных, открытый в 2000 г. [1] , поддерживается FIS . GT.M используется в качестве серверной части их банковского приложения FIS Profile [2] и обслуживает банки ING DIRECT в Испании , Франции , Италии , Голландии , Румынии и Индии ; Capital One 360 в США; Мандарин (Scotiabank) в Канаде; Атом Банк ; [3] Тандем Банк ; Банк Сейнсбери ; [4] Scottish Widows и Barclays Direct в Великобритании. [5] Он также используется в качестве открытого источника бэкэндом для электронной медицинской системы WorldVistA и других открытых источников , таких как EHRs OpenVista Medsphere в. [6] Он указан как партнер Red Hat по решениям для здравоохранения с открытым исходным кодом . [7] Сегодня он состоит примерно из 2 миллионов строк кода. [ требуется обновление? ]
Технический обзор
GT.M состоит из языковой подсистемы, подсистемы базы данных и служебных программ. Подсистема языка и подсистема базы данных тесно интегрированы, но каждая из них может использоваться друг без друга. Подсистемы языка и базы данных имеют общую организацию данных и типизацию.
Организация данных и набор текста
В GT.M всего два типа данных - канонические числа и строки. Строка - это любая произвольная последовательность байтов (включая нули). Строка, такая как "42"
каноническое число. Типизация данных является динамической, и преобразование между двумя типами выполняется по мере необходимости «на лету»: 1+"42"
выдает результат 43
, а первый символ 43
- 4
.
Существует только одна структура данных - многомерные разреженные массивы (узлы ключ-значение, поддеревья и ассоциативная память - все равно допустимые описания) с до 32 индексов. Скаляр можно рассматривать как элемент массива с нулевыми индексами. Узлы с различным количеством индексов (включая один узел без индексов) могут свободно сосуществовать в одном массиве. Например, если кто-то хочет представить национальные столицы США :
: Set Capital ("United States") = "Washington": Set Capital ("Соединенные Штаты", 1774,1776) = "Филадельфия": Set Capital ("United States", 1776,1777) = "Baltimore"
При первом назначении переменные создаются по запросу. Таким образом, первая команда Set выше создаст переменную Capital
. Переменные имеют область видимости в языке и называются локальными переменными . Доступ к базе данных выглядит как доступ к массиву, например:
: Set ^ Capital ("United States") = "Вашингтон"
но каретка (^) означает, что это доступ к базе данных. Переменные, используемые для доступа к базе данных, имеют единую глобальную область видимости и, конечно же, сохраняются и совместно используются процессами. Их называют глобальными переменными . Первые 31 символ имени переменной имеют значение.
Команды Kill и ZKill используются для удаления поддеревьев значений.
GT.M использует Unicode ( ISO / IEC-10646 ) для поддержки международного набора символов.
Подсистема базы данных
Логическая база данных процесса GT.M состоит из одного или нескольких глобальных имен переменного пространства , каждые из которых состоит из неограниченного числа глобальных переменных. Для каждого пространства имен глобальных переменных глобальный каталог сопоставляет глобальные переменные с файлами базы данных, в которых они фактически находятся. Неограниченное количество глобальных переменных может поместиться в одном файле базы данных; глобальная переменная должна помещаться в один файл базы данных.
Файл базы данных состоит из 224M (276 168 704) блоков базы данных. Блок базы данных кратен 512 байтам с максимальным размером 65 024 байта. Обычно используемые размеры блока составляют 4 КБ, 8 КБ и 16 КБ, поэтому при размере блока 8 КБ отдельная глобальная переменная может вырасти до 1792 ГБ. Узел глобальной переменной (глобальная переменная, индексы плюс значение) должен помещаться в один блок базы данных, и каждый блок имеет 16-байтовые накладные расходы. Таким образом, самый большой узел, который поместится в базе данных с размером блока 4 КБ, составляет 4080 байт. Ключ (глобальная переменная плюс индексы) может иметь длину до 255 байт.
Механизм базы данных не имеет демонов, и процессы, обращающиеся к базе данных, работают с обычными идентификаторами пользователей и групп - процесс имеет доступ к файлу базы данных тогда и только тогда, когда право собственности и разрешения этого файла базы данных (плюс любое многоуровневое управление доступом, такое как SELinux ) разрешает доступ . Каждый процесс имеет в своем адресном пространстве всю логику, необходимую для управления базой данных, а процессы взаимодействуют друг с другом для управления файлами базы данных. Когда файл базы данных ведется в журнал, обновления записываются в файлы журнала перед записью в файлы базы данных, а в случае сбоя системы файлы базы данных могут быть восстановлены из файлов журнала.
Ядро базы данных также поддерживает обработку транзакций . Итак, такой код, как:
TStart () Set ^ Capital ("France") = "Paris" Set ^ Country ("Paris") = "France"TCommit
реализует транзакцию ACID . GT.M использует оптимистичный контроль параллелизма для управления транзакциями.
Архитектура подключаемого модуля позволяет зашифровать базу данных для защиты данных в состоянии покоя. GT.M распространяется со справочным плагином, который использует GnuPG .
Подсистема языка
В отличие от базы данных, где узлы глобальных переменных должны помещаться в блоке базы данных, строки локальных переменных могут увеличиваться до 1 МБ. Среда выполнения GT.M обеспечивает динамическое выделение памяти со сборкой мусора. Количество локальных переменных и количество узлов в локальных переменных ограничено только хранилищем, доступным процессу. Область видимости локальной переменной по умолчанию - время жизни процесса. Локальные переменные, созданные в подпрограммах с помощью команды New, имеют более ограниченную область действия.
Подпрограммы GT.M динамически компилируются и связываются для выполнения в адресном пространстве каждого процесса. За исключением 32-битной реализации GT.M для платформы x86 Linux, объектные модули также могут быть размещены в разделяемых библиотеках с помощью стандартной ld
команды, и в этом случае используется общая память. Это важно, потому что такое приложение, как VistA, имеет более 20 000 подпрограмм, скомпилированный объектный код которых превышает 200 МБ. В крупной больнице, в которой работает VistA, могут одновременно работать тысячи пользовательских процессов.
За несколькими небольшими исключениями, GT.M включает почти полную реализацию стандарта ISO M ( по историческим причинам известного как MUMPS ).
В GT.M M-код может свободно вызывать C-код (или код на других языках с C-совместимым интерфейсом), а C-код может свободно вызывать M-код (так что программа верхнего уровня может быть C main()
). Например, это модуль GT.M в CPAN , m_python для доступа из Python или привязка EGTM для Erlang .
Веб-службы, написанные на GT.M, могут быть развернуты на супер-сервере Интернета, таком как inetd или xinetd . Веб-приложения могут использовать многоуровневое программное обеспечение, такое как EWD или CFMumps .
Платформы
GT.M полностью поддерживается на следующих платформах: [8]
- AIX в IBM System p
- Linux на архитектурах x86_64 и IA-32 ( x86 ). YottaDB вилка из GT.M добавляет поддержку ARM . [9]
GT.M больше не поддерживается на следующих платформах:
- HP-UX по состоянию на октябрь 2015 г. (V6.2-002A)
- OpenVMS по состоянию на декабрь 2014 г. (V6.2-001)
- Solaris по состоянию на декабрь 2015 г. (V6.2-002A)
База кода для GT.M в Linux на IA-32 ( x86 ) включает изменения, необходимые для работы в Cygwin в Microsoft Windows, но эта платформа не поддерживается.
Лицензирование
В Linux на x86-64 и IA-32 ( x86 ) и на OpenVMS на Alpha / AXP GT.M выпускается как бесплатное программное обеспечение с открытым исходным кодом (FOSS) в соответствии с условиями Стандартной общественной лицензии GNU Affero версии 3 . На других платформах он доступен по проприетарным лицензиям.
Общие приложения
GT.M преимущественно используется в сфере здравоохранения и финансовых услуг. Первое промышленное использование GT.M было в 1986 году в Мемориальном травматологическом центре Элвиса Пресли в Мемфисе, штат Теннесси . Через FIS Profile он обслуживает банки ING DIRECT в США, Канаде, Испании, Франции и Италии. [5]
Доступ SQL и ODBC к базам данных GT.M существует как отдельные коммерческие продукты.
Рекомендации
- ^ «Linux PR: Санчес предлагает базу данных GT.M как бесплатное программное обеспечение с открытым исходным кодом для пользователей Linux» . web.archive.org . 9 декабря 2000 г.
- ^ http://www.redhat.com/f/pdf/rhel/Profile_Benchmark_Results_11-17-2007.pdf
- ^ «Британские банки-конкуренты: кто есть кто (и каковы их технологии)» . FinTech Futures . 30 мая 2018.
- ^ https://ibsintelligence.com/ibs-journal/ibs-news/sainsbury-s-bank-suffers-systems-outage/
- ^ a b http://www.allbusiness.com/banking-finance/banking-lending-credit-services-cash/6129691-1.html
- ^ «Архивная копия» . Архивировано из оригинала на 2011-06-08 . Проверено 7 января 2010 .CS1 maint: заархивированная копия как заголовок ( ссылка )
- ^ «Открытые технологии для предприятия» . www.redhat.com .
- ^ «Примечания к выпуску GT.M V6.3-009» . tinco.pair.com .
- ^ «Перенос на Linux на ARM · Проблема № 61 · YottaDB / YDB» . GitHub .
дальнейшее чтение
- Игнасио Вальдес (17 ноября 2002 г.), К.С. Бхаскар получает награду LMN за достижения 2002 г. , linuxmednews.com
Внешние ссылки
- Страница проекта на SourceForge
- Документация GT.M
- YottaDB , вилка GT.M
- EGTM: привязка GT.M для Erlang
- nodem: привязка GT.M для Node.js