The database that stores a patient record as a path, not a join.
InterSystems Caché is a high-performance, multi-model database: object, relational and multidimensional at once. Under the hood it keeps data in hierarchical globals you address directly instead of searching, which is exactly why it sits beneath some of the most demanding systems in healthcare. We spent years engineering on it, inside a high-volume behavioral-health EHR.
A database that doesn't look like a database
InterSystems Caché combines database management, application development and integration in a single platform. It speaks three data models (relational, object-oriented and multidimensional) over one physical store, so a team can model entities as objects, query them in SQL, and still get the raw speed of direct multidimensional access.
That combination is why it shows up in healthcare, banking, government and telecom: places where transactions are high-volume, latency is felt by a human waiting, and downtime isn’t an option. InterSystems has built data software since 1978; Caché became the platform of record for organisations that needed performance without giving up developer productivity.
Healthcare data, at the speed care needs it
A behavioral-health provider generates an enormous amount of data every day: demographics, diagnoses, treatment plans, assessments, medications, lab results, authorisations and claims. A clinician needs the right slice of it instantly.
- Manage large volumes of structured and unstructured clinical data.
- Keep transaction processing fast while thousands of records change at once.
- Integrate data across departments and outside systems without building a silo per source.
- Stay available and consistent, because a few seconds’ delay can change a clinical decision.
Traditional relational databases can stall here: complex, high-volume workloads turn into multi-table joins and repeated disk seeks. Caché takes a different route to the same data.
One platform, cleanly layered
Applications talk to business logic; logic reaches data through either an object or a SQL lens; both resolve to a single multidimensional engine that owns physical storage. A request travels down and a response travels back up the same spine.
Why multidimensional beats joins
A relational read fans out across tables and joins them back together. A Caché read walks a known path straight to the value. Same data, far fewer moving parts.
Data lives in globals: persistent, hierarchical arrays where the subscripts are the index. There is no separate table to define and no row to look up; the address you write is the address you read. Globals are sparse, so only the nodes that exist consume space, and deeply nested clinical structures come back without a single join.
1; In Caché a patient record IS its access path. No table, no row id,2; and no join: the subscripts ARE the index. Sparse by nature, so only3; the nodes that exist take any space.4SET ^Patient(1001,"Demographics","Name") = "Riley Carter"5SET ^Patient(1001,"Demographics","DOB") = "1986-04-12"6SET ^Patient(1001,"Clinical","Assessment","PHQ9") = 147SET ^Patient(1001,"Billing","Claims",claimId) = $LISTBUILD(code, units, auth)8 9; Reading is direct addressing: walk the path, not a query plan.10WRITE ^Patient(1001,"Clinical","Assessment","PHQ9") ; -> 14| Feature | What it buys you |
|---|---|
| Multidimensional storage | Direct, sparse access with no joins to read a full record |
| Object + SQL on one store | Model in objects, query in SQL, no second copy of the data |
| ObjectScript | MUMPS-class speed with classes, inheritance and exceptions |
| High availability | Mirroring and shadowing keep downtime low |
| Scalability | Grows with users and data without a redesign |
| Built-in security | Row- and role-level controls over sensitive records |
MUMPS isn't legacy, it's the engine's heart
MUMPS (the M language, born in a hospital in 1966) introduced global variables and a multidimensional data model. Caché didn't replace that; it grew from it, adding indexing, transactions, security, objects and SQL on top.
Understanding MUMPS pays off precisely because so much of Caché’s behaviour, and so much production healthcare code, still rests on globals. ObjectScript is the modern extension: it keeps M’s syntax and speed while adding classes, methods, properties, exception handling and SQL. The same record can be a global, an object and a SQL row.
1/// The same data the global holds, now an object you can model,2/// inherit and validate, and that the SQL engine can also query.3Class App.Patient Extends %Persistent4{5 Property Name As %String(MAXLEN = 120) [ Required ];6 Property DOB As %Date;7 8 /// One declaration, two access paths: objects in code, rows in SQL.9 Index NameIdx On Name;10 11 ClassMethod Score(id As %Integer) As %Integer12 {13 Quit ^Patient(id, "Clinical", "Assessment", "PHQ9")14 }15}What we engineered on Caché
Inside a large behavioral-health EHR (patient records, treatment planning, clinical documentation, billing, reporting and compliance), we worked across the backend and the platform around it.
Backend in MUMPS & ObjectScript
New features and fixes across legacy M routines and modern ObjectScript classes that drive core clinical workflows.
Electronic forms
Clinical capture forms with field-level validation that catches bad data at the point of entry, not after it lands.
Batch import automation
ObjectScript routines that turn structured config files into forms and system setup, so deployments take minutes, not days.
Web services & integration
Services that exchange data with hospitals, labs, pharmacies and payers so a record entered once is correct everywhere.
Reporting
Crystal Reports templates over Caché data for patient summaries, clinical documentation and compliance submissions.
Performance tuning
Better global access patterns, leaner queries and tighter transactions to keep clinical workflows responsive under load.
Forms that refuse bad data at the door
Electronic forms are where clinicians actually enter assessments, diagnoses and treatment plans. We pushed validation to the point of entry (required fields, numeric ranges, cross-field dependencies and clinical rules), so the record is correct before it’s ever persisted to a global.
Each form composes sections, groups, fields, validation rules, calculated values and conditional logic. Rules run on the client and again on the server in ObjectScript, so a treatment-plan form can require a diagnosis before objectives are entered. Configurable forms let organisations change clinical workflows without an application code change, and validated values map cleanly into Caché’s multidimensional structures for fast retrieval.
From config files to a configured system
Standing up a new organisation means importing large numbers of forms, assessment templates, lookup values and workflow rules. Doing that by hand is slow and error-prone, so we built a batch import framework in ObjectScript.
The engine validated before committing anything (field dependencies, duplicate identifiers, data types, referential integrity and configuration hierarchy), then transformed valid input into object structures and persistent globals, tuned to minimise disk I/O. The result: consistent setup across deployments, in a fraction of the time.
One record, reflected everywhere
A modern healthcare ecosystem is many systems that must agree. Caché is built to be the integration point: it collects from hospitals, labs and payers, standardises it, and serves a single repository the rest of the platform reads from.
We built and maintained the web services that move data between the platform and external systems, so information entered in one place is reflected accurately across every connected system. Standardising into a unified repository is what makes comprehensive reporting and analytics possible, and what dissolves the data silos that slow care down.
Why it holds up where care can't wait
The year MUMPS was created, and its model still powers the engine
To read a full patient record from a global
Data models over one physical store: object, relational, multidimensional
- Faster retrieval of deeply nested records, with no joins to reassemble a patient.
- Lower database overhead and high transaction throughput under real clinical load.
- Interoperability that keeps records consistent across hospitals, labs and payers.
- Reliability and availability that let clinicians trust the data is there when they reach for it.
Old roots, modern reach
Caché’s advantage is structural: store data the way you read it, and most of the work a relational database does on every query simply disappears. It asks for specialised knowledge (globals, ObjectScript, a smaller community than mainstream databases, real effort to migrate onto), but in return it delivers the speed, reliability and scale that mission-critical healthcare depends on. Knowing the platform from MUMPS up is what lets a team extend it safely instead of working around it.
Running on Caché, MUMPS or another platform everyone’s afraid to touch? We’re at home in the engine room as well as the front end.
Talk to engineering