Intersystems Cache’ highlights
I talked with Robert Nagle of Intersystems last week, and it went better than at least one other Intersystems briefing I’ve had. Intersystems’ main product is Cache’, an object-oriented DBMS introduced in 1997 (before that Intersystems was focused on the fourth-generation programming language M, renamed from MUMPS). Unlike most other OODBMS, Cache’ is used for a lot of stuff one would think an RDBMS would be used for, across all sorts of industries. That said, there’s a distinct health-care focus to Intersystems, in that:
- MUMPS, the original Intersystems technology, was focused on health care.
- The reasons Intersystems went object-oriented have a lot to do with the structure of health-care records.
- Intersystems’ biggest and most visible ISVs are in the health-care area.
- Intersystems is actually beginning to sell an electronic health records system called TrakCare around the world (but not in the US, where it has lots of large competitive VARs).
Note: Intersystems Cache’ is sold mainly through VARs (Value-Added Resellers), aka ISVs/OEMs. I.e., it’s sold by people who write applications on top of it.
So far as I understand – and this is still pretty vague and apt to be partially erroneous – the Intersystems Cache’ technical story goes something like this:
- Intersystems Cache’ is an object-oriented DBMS.
- The preferred language for talking to Intersystems Cache’ is Java.
- Intersystems claims Cache’ has good SQL performance, for most kinds of use-case.
- Intersystems Cache’ stores data in a kind of sparse hierarchy. It uses a lot of “common character count” compression, which sounds a lot to me like Patricia tries.
- Intersystems has recently bundled some BI/reporting tools into the Cache’ stack. Surely not coincidentally, Intersystems once told me that some of its ISVs paid more to Crystal Reports than to Intersystems.
- Intersystems Cache’ has had Sybase emulation for several years, and just added Informix emulation. Most but not all stored procedures from those other DBMS run against Cache’ as well.
- Intersystems Cache’ recently added a bunch of manageability, security, etc. features, the details of which generally inspired “Oh, you didn’t have that earlier?” reactions in me.
- Intersystems’ just did a revamp of the Cache’ object model to make it more Smalltalk-like, in which messages are set to parent rather than child classes when appropriate. Thus, when you recompile a class, you don’t also have to recompile all its children, and incremental recompilation is now near-instantaneous. (Put that one in the “Oh, you didn’t have that earlier?” category too.) Versioning will be better as well.
- In the latest release, Cache’ has added what Intersystems calls “Java Event Processing.” This doesn’t sound like CEP (Complex Event Processing), and I forgot to ask whether it was memory-centric at all. Anyhow, the idea is to bang objects into the database really quickly, having them be immediately available for SQL query. “Really quickly” means >10,000 objects/core/second, with one test at the European Space Agency getting up to 85,000. By way of contrast, Intersystems asserts (based on bake-offs) that RDBMS competitors have to insert into BLOBs to get competitive performance, with associated loss of queryability.
Finally, a few financial highlights:
- Intersystems did a little over $1/4 billion in revenue in 2009.
- 85% of that was Cache’.
- Revenue growth was slightly positive in 2009, and 15% in 2008.
- Headcount growth was 25% in 2009 and is planned to be big again in 2010, after being modest in prior years.
Comments
8 Responses to “Intersystems Cache’ highlights”
Leave a Reply
From personal experience, I will suggest that you inspect their insert performance claims closely.
That performance might come from disabling transactions and using asynchronous disk writes or the file system cache. Which would put the configuration at exactly how other RDBMS vendors handle BLOBs. Which would explain why anyone would think to compare insert performance of records in one DBMS to that of BLOBs in another.
Having those configuration options is good. But let’s just say that I have been annoyed by the way they phrase various claims in their sales pitch.
They did have a good looking API for doing high speed data inserts via shared memory. But again, something that should be revealed as part of a performance comparison since use of this API involves tradeoffs.
Also, the event system that I saw at that time worked like this:
1) insert event as a record
2) fire the equivalent of a post-insert trigger
The triggers were coded in MUMPS, so it is possible that now they are coded in Java. I sort of liked their trigger mechanism, but it’s not really comparable to what a CEP engine does.
And note that all data in Cache is stored as text. Even numbers, which are automatically converted every time a calculation is done. I’m not judging this, just pointing out an interesting fact.
If you’re into the tech details, it’s fun to learn a about how Cache works. They have very interesting and sometimes unique approaches to handling DBMS functionality.
Hans,
You raise excellent points. I hope somebody from the company addresses them.
Thanks,
CAM
Unfortunately, some of those points that Hans makes are incorrect.
1) The product was named Caché because it is very good
at caching, those performance numbers are not from
using the file system cache, and why is using asynchronous
disk I/O an issue for the performance numbers?
The numbers are for sustained activity, not just doing a small burst of inserts and then having the writing occur after the benchmark completes.
2) Triggers are coded in CacheObjectScript, not M[UMPS]
(difference is kind of like C++ compared to C, but even more so)
I believe that triggers can also be written in CacheBasic (like VBScript), or CacheMultiValueBasic (like MultiValiue/Pick Basics)
3) Data in Caché is NOT just stored as text, and does NOT need conversion every time a calculation is done.
They are internally stored as either:
Binary strings,
Unicode strings (but in a much more compact form than either using UTF-8, UCS-2 or UCS-4),
integers,
scaled decimals (64-bit signed #s with a power of 10 exponent from -128 to 127),
or IEEE 64-bit doubles.
Hans may have been confused because to the CacheObjectScript language, those internal types are mostly invisible to the programmer (except for the distinction between normal Caché strings and numbers (i.e. decimal arithmetic) and IEEE floating point values (binary floating point arithmetic)).
[…] DBMS are not what one would normally call object-oriented DBMS; for an example of those, consider Intersystems Cache’. And just to close the loop on confusion — Cache’ can also be used as an XML […]
There are some free tools for InterSystems Caché like the SQL Editor: Caché Monitor.
[…] DBMS never got off the ground, Intersystems Cache’ eventually excepted. The core problems […]
We have been teaching M programming, systems and databases since 1988, with a focus on InterSystems Caché, while teaching relational databases in general database courses. If students ask for it, we can provide access to Fidelity IS Global GT.M (which you didn’t mention). Your discussion missed a number of points regarding InterSystems environments, and the philosophy behind the programming and database environments. At least one of my students wrote me (several years ago) to report he made enough money as an M (InterSystems) consultant to retire before I did. It is fun to teach InterSystems as there are many surprises for students when they discover what the technology can do. Two faculty in our department also introduce students to other NoSQL environments (MongoDB, Neo4j). Our students were interested to learn that InterSystems Caché is being used in space research – mapping the Milky Way for the European Space Agency (ESA).
Valerie Powell
[…] the same time I suggested that Intersystems Cache’ was the last significant object-oriented DBMS, only to get the pushback that they were […]