Question

I am looking for a detailed definition/discussion of Mumps globals implementation. There is a document titled "MUMPS Globals and Their Implementation", but I have not been able to find any way to order it, let alone access a digital copy. (it was printed in 75)

In general I am trying to find an in depth discussion of Mumps' database internals.

Was it helpful?

Solution

I would assume that the database internals will differ greatly between the various MUMPS implementation. So, I think your best bet would be to look at how it is done in the open source MUMPS implementation :

OTHER TIPS

Take a look at this paper, A Unified Local, Global and Routine Design for Mumps Micro-Computer System by Frank Brown. Dr. Brown was the designer of the global system from COMP Consultants Standard MUMPS. I was the implementer, in 8086 assembly! Yes, way back in 1981.

It was essentially a simple B-tree with compressed keys.

I am not exactly sure what you are after. Mumps globals are simply a sparse, multi-dimensional array. The programmer is free to implement their data base strategy as they see fit. For example, a customer database can be implemented as:

^CUSTOMER(custnum,"NAME")=name
^CUSTOMER(custNum,"ADDRESS")=address
^CUSTOMER(CustNum,"PHONE")=phone

alternatively, the customer database can be implemented as:

^CUSTOMER(custNum)=name|address|phoneNum

Here, I've used the pipe character "|" as a delimiter in the customer record. In most mumps implementations, the record string length is limited to 32k.

In a relational sense, the CUSTOMER global can be thought of as a table with custNum as the key and name, address and phone as the columns .

A similar scheme could be used for an orders table:

^ORDERS(orderNum)=date|invoiceNum|totalPrice

To relate a customer to an order, we could use a separate global:

^custOrders(custNum,orderNum)=""

or alternatively add them to the customer global:

^CUSTOMER(custNum)=name|address|phone
^CUSTOMER(custNum,orderNum)=""

or even combine the two tables into one global:

^CUSTOMER(custNum)=name|address|phone
^CUSTOMER(custNum,orderNum)=date|invoiceNum|totalPrice

The strategy used is up to the developer which is extremely flexible and powerful.

There are a couple of other documents that I would recommend in addition to the document that you reference above. For some basics on globals and what they are, I would recommend:

Extreme Database Programming with MUMPS globals

For a more advanced topic, I recommend:

A Universal NoSQL Engine, Using a Tried and Tested Technology

Both documents are authored by Rob Tweed who is a bit of a mumps evangelist with his company M/Gateway Developments. The first document gives good background on mumps globals and the second on using them in a variety of strategies including noSQL.

Agree with previous answer; question is pointed to implementation details which would be considered proprietary by the vender. There is insight to the open source/historical versions, but Cache and current versions would deviate as they get into their modern scaling capabilities.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top