MUMPS:50年历史、可实现RDBMS和Hadoop一切的数据库

MUMPS是一款历史悠久的数据库系统,它不仅具备NoSQL数据库的特点,还能模拟RDBMS并处理SQL查询。MUMPS在医疗保健、金融等领域广泛应用,其高性能和简单管理使其成为关键业务系统的基石。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文: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 Centric
  • Allscripts
  • Epic
  • Coventry Healthcare
  • EMIS
  • Partners HealthCare(包括麻省总医院)
  • MEDITECH
  • GE Healthcare(从前的IDX Systems and Centricity)
  • Sunquest Information Systems
  • 许多参考实验室,比如DASA
  • Quest Diagnostics
  • Dynacare

金融机构包括:

  • 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编程教程。

### 在 Ubuntu 上安装并配置 MUMPS #### 安装依赖库 为了使 MUMPS 正常工作,在开始之前需确保已安装必要的依赖项。这些依赖项不仅包括基础的编译工具链,还涵盖了线性代数运算所需的BLAS/LAPACK库: ```bash sudo apt-get update sudo apt-get install libblas3 libblas-dev liblapack3 liblapack-dev gfortran build-essential cmake git ``` 上述命令会下载并安装一系列必需的基础软件包[^1]。 #### 下载与构建 MUMPS 获取最新版源码可以通过访问官方GitHub仓库来完成。这里提供了一种基于Git的方式克隆项目到本地计算机: ```bash git clone https://github.com/Mumps-consortium/mumps.git mumps-source cd mumps-source mkdir build && cd build cmake .. make -j$(nproc) ``` 此过程将自动处理大部分编译参数设置,并利用CMake简化跨平台兼容性的难题[^4]。 #### 配置环境变量 为了让系统能够识别新安装的MUMPS库文件位置,建议编辑`~/.bashrc`或其他shell初始化脚本加入如下路径声明: ```bash export LD_LIBRARY_PATH=/path/to/mumps/build/lib:$LD_LIBRARY_PATH export PATH=/path/to/mumps/build/bin:$PATH source ~/.bashrc ``` 请注意替换其中 `/path/to/mumps/...` 为实际解压或编译后的目录地址。 #### 测试安装成果 最后一步是验证安装是否成功。可以在终端执行简单的测试程序以确认一切正常运作: ```bash cd /path/to/mumps/test ./test_example ``` 如果没有任何报错提示,则说明MUMPS已经正确部署完毕。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值