原文:MUMPS – The Most Important Database You (Probably) Never Heard Of
译者:孙薇
责编:仲浩
声明:CSDN原创译文,禁止任何形式的转载。
【编者按】是否听说过有这样一款数据库,它可以完成RDBMS和Hadoop能做的一切,如今在全世界范围内广泛采用,并已有50年历史?从未听说过MUMPS?看看下面这些惊人的事实吧。
没听过MUMPS之名的人可不止你而已。笔者也是听一个同事提到,并在他的督促下做了一点研究。研究结果却令人震惊。
MUMPS诞生于1966年,旨在解决医疗保健行业的多用户系统其中的大数据流问题。它的出现早于RDBMS,但却包含了一切NoSQL的功能,如大规模并行处理、水平扩容以及在商用硬件上的运行。它很容易模拟四种类型的NoSQL数据库(键值型数据库、列式数据库、文档型数据库、图结构数据库)。在70、80年代,经过修改后它可以模拟RDBMS并处理SQL查询。由于完全与ACID兼容,部分功能与NewSQL相同。如今在各个领域,包括医疗保健的病患信息系统、银行业、欧洲证券交易所还有旅行业等等,它都在发挥着活力与健康。
去医院看病或使用ATM机的时候,数据很有可能就是通过基于MUMPS的系统来处理并存储的。尽管到2016年,从初始设计至今,MUMPS已经有了50年历史,不过在医疗保健或大型金融机构领域,它仍旧满足着当今的商业需求,几乎没有RDBMS或NoSQL代替的趋势。要说MUMPS在被谷歌研究员发现之前,就是/曾是NoSQL也是没错的。
一点背景知识
MUMPS创建于1966年,多年来一直保持更新。它得名于麻省总医院实用多程序系统(Massachusetts General Hospital Utility Multi-Programming System),或称M。顾名思义,该技术最初的原始需求来自大型医院(后来还包括银行),以应对高吞吐量的多用户事务处理进程。即便出现了RDBMS(还有后来的NoSQL和NewSQL),甚至到了今天,MUMPS在性能与功能上仍旧活力十足,甚至更为优秀。
一开始,MUMPS是为了解决如何接收、存储和处理在单个ICU病人身上、单就一天中所产生与聚集的大量测试数据还有其他变量数据而出现。变量数据包括了至少12种不同的变量,诸如体温、心率、血氧浓度、血液酸碱度等等。生成的数据还包括:通过传感器(电极)进行的多项实时测量,再加上每天针对每个病人所做的多个实验室测试。平均来讲,每个病人的数据需要20名左右的医生和医疗人员访问,而病人数量多达几十万。
这很像是我们最近使用Spark和Storm解决的物联网数据流问题,但在足足40到50年前就由MUMPS完全解决了。
MUMPS的各种版本
十年前,MUMPS最早的版权过期了。InterSystems Corp.以Caché之名推出了MUMPS的改进版。还有一个版本叫做GT.M,在Linux上可用,有免费开源许可。查找这些名字就像搜索MUMPS一样有效。几年前还有个活动,简单称其为M,因此在定义栏可以看到MUMPS/M的名字。
它是有自己语言的数据库,还是有自己数据库的语言呢?
这个问题就像那个经典谜题:是巧克力上的花生酱,还是花生酱中的巧克力?但更为重要是理解:为什么MUMPS成功而有效?MUMPS两者兼备。尤其它还是集成了自己的语言,而这种语言特别为访问和操控做了优化,这样的一款数据库。尽管这种语言被批评为过于古老,但现代用户可将其与Python类比。
拥有“内置”数据库让MUMPS对存储有着高级别的访问权,而在其他程序或数据库中却没有这样的优势。这种访问使用“变量”(键)与“数组”(表格)这样的稀疏方式。默认结构是键值式(尽管MUMPS很容易被注释为按照文档型、列式、图结构数据库,甚至RDBMS的方式),有JSON的现代并行库。其结构为无模式,数据存储在多维分层的稀疏数组中(也被称为键值节点、子树或关联存储器)。每个数组可能有多达32个下标或维度。天啊!这听起来就像我们刚发现了Hadoop的神圣起源。
其速度与效率的关键在于,这个数据库是直接通过变量而不是查询或检索来访问的。MUMPS语言/数据库的一个功能就是:使用同样的基本语法,访问非永久性存储器(易失性存储器)和永久性存储器,使得在本地(易失性)或全局(非易失性)变量中,函数都可使用。事实上,这样提供了极高的数据访问性能。Michael Byrne在Motherboard上撰文对此进行了很好的解读。
“变量(在本例中也指键)只在这些数组中标出不同的存储位置,它们在MUMPS被称为全局变量。MUMPS系统可能由许多台计算机组成,在非易失性内存中存储有自己的全局数组集。因此,与C++这样的语言所创建的数组不同,MUMPS的全局数组集不止存在于程序存续期间或是计算机内存中,还存在于服务器上,在任何指定的时间内,可通过系统的某台计算机来访问。我们称其为持久性。”
“结果就是:MUMPS程序员可以直接接触数据库,而不用通过查询的手段。这样速度更快,不再需要查询抽象,而是直接访问,并允许一系列编程思想的替换。首先,作为编程人员,我可以从这些存储的全局变量中选取一个,赋予其“children”——就是该项的一些额外属性。因此,最终我们得出了一个列表,里面的内容可以快速用不同的方式来描述与添加。其关系为层次化的。”
如今使用的领域
MUMPS因VistA——退伍军人卫生信息系统与技术架构(Veterans Health Information Systems and Technology Architecture)而著名,这个套组十分巨大,包含80多种不同的软件模块,支持着美国最大的医疗系统。它还维护着163家医院、800家诊所和135家疗养院的800万份退伍军人的电子病历,使用者多达18万名医疗人员。还被认为是创建全国性病历网络的当前工作模型。
印度卫生服务国防部CHCS医院系统的大部分
现使用MUMPS的大型医疗保健公司包括:
Care CentricAllsEpicCoventry HealthcareEMISPartners HealthCare(包括麻省总医院)MEDITECHGE Healthcare(从前的IDX Systems and Centricity)Sunquest Information Systems许多参考实验室,比如DASAQuest DiagnosticsDynacare
金融机构包括:
Ameritrade,美国最大的在线交易服务商,每天处理逾120亿个事务英格兰银行巴克莱银行
在2010年,欧洲航天局选择了MUMPS/Cache作为Gaia任务的后备支持,用前所未有的精度绘制银河系的三维星图。
优势
MUMPS与NoSQL是一致的,而且明显很成熟。
在多个低成本的商业服务器上可以水平弹性扩展。由于就是为了支持大量的数据而设计,其性能极其优秀,远胜于RDBMS。管理起来极其简单,基本上不需要DBA。所使用的商用硬件和开源代码成本很低。灵活的数据建模,易于复制RDBMS、键值式数据库、列式数据库、文档型数据库、图结构数据库的功能。易于支持SQL高级分析和商业智能。完全支持联机事务处理,兼容ACID。
劣势
了解人群不多。在医疗保健与金融业之外市场份额较小。相关的程序精英较少。在InterSystems之外(商业供应商)几乎没有代码库存在。
这门技术是否需要升级?
也许有人在想,为什么不将MUMPS与Hadoop结合起来?事实上,MUMPS能够以Hadoop的所有方式扩展执行。将其结合起来只会增加复杂度,在规模和性能上没有明显的改善。此外,还需要懂两种系统的人将其保持同步。因此MUMPS这样就好了,没必要再结合Hadoop了。
这里有机遇吗?
一方面,会有人在新建项目时选择MUMPS而不是Hadoop或者RDBMS吗?也许没有。对MUMPS,人们欠缺足够的了解,这方面的程序员也不多。
然而在医疗保健或金融业工作的人,特别是已经在使用MUMPS的地方会考虑这个问题。针对LinkedIn的一个搜索发现,整个LinkedIn只有699名MUMPS开发者,77名Cache开发者。如果有人已经掌握了NoSQL,并想增加竞争力,这也能增加很小的一些竞争优势。掌握MUMPS可以享有更好的薪酬和工作保障。这里是一份优秀的MUMPS编程教程。