6 ms·
I worked in InterSystems M/VX (MUMPS for VAX/VMS) on a 2 year project in 1985/86. We developed a wireless ambulance dispatch system entirely in M/VX except for
by defined 10y ago
I worked in InterSystems M/VX (MUMPS for VAX/VMS) on a 2 year project in 1985/86. We developed a wireless ambulance dispatch system entirely in M/VX except for PDP-11 front-end processors that did the actual communications with the UMCTs (Universal Mobile Control Terminals) in the ambulances.
It ran on a VAX 11/751 that was maxed out with 8 MB (yes, that's megabytes) of RAM and a state of the art Fujitsu Eagle 400 MB (yes, that's megabytes) 14" hard drive. The user interface was text-based forms on VT-100 terminals.
M/VX was selected because there was nothing available at the time that could look up data nearly as fast as the M/VX B-Tree database, and we had to look up a lot of map coordinates.
I wouldn't grace the data storage with a description of NoSQL - it was plain and simply a multi-rooted hierarchical database, or less fancily, a set of multidimensional disk-based associative arrays. As others have pointed out, it differed syntactically from a memory-based array only by being prefixed with a caret/circumflex (^). It certainly was damn fast (for the day).
Initially, it was so cool to be able to store something just by writing
set ^address("US","FL","Miami","Main St",12345)=1
But the pain soon set in.
There were no such things as indexes. We had to create (and maintain) inverted arrays for that purpose.
If we got the hierarchy wrong, it was murder to reorganize it. Queries were only really possible if they fit into an existing hierarchy.
There was really no such thing as an ad-hoc query.
Hmm, maybe it was kind of like NoSQL...
But the killer feature (as in, it killed us over and over) was falling foul of the hideous global variable, $test, as others have pointed out.
I don't remember clearly, but if you wrote something like
set a=1
set b=0
if a=1 open 1:"input.txt",old
else set b=10
the value of b after this would be 0 if "input.txt" could be opened, and 10 if not. This is because open set $test to false if it fails, so the else executes, even though a=1... the horror, the horror....
Oh, oh, oh... and the result of 2+35 would be 25, not 17, because there was no operator precedence. You had* to use parentheses.
So it was kind of amazing in some ways (because ambulance dispatch system in 8MB of RAM) but a horror show in so many others. I'm glad it was only 2 years, and I did get to write some cool VAX PASCAL to allow M/VX to interface with the FEPs.
- jsgrahamus53 10y agoThe VA took MUMPS and created a DBMS out of it, which would allow one to define the schema and then use utilities to automatically update indices. It is much nicer when the system remembers to do that for you. There were gotchas in the language that required you to understand it and play ball its way. Not unlike other languages I've seen. The payback was trememdous flexibility and performance on minimal (for today) systems.