McKesson: CALM
From Devwiki
Contents[hide] |
[edit] Objectivity Case History
[edit] Important
This information is an archive, so any use of the present sense in the text should be taken in the historical context, generally determinable from the Status section below.
[edit] Status
Can we talk about this customer and the product/project? Yes.
Can be referenced: Yes
[edit] Separate Collateral
[edit] Customer Information
- Customer: McKesson (formerly LMS Medical)
- Country:
- Industry: Healthcare
- Application Domain: Computer Assisted Labor Monitoring (CALM) for Obstetrical care units
- Status: Went into production in Oct 98.
[edit] Environment
- Hardware: Intel
- Operating System: Windows
- Precision: 32 or 64 bit?
- Development language: C++
- Compiler: All.
- Third Party vendor tools: ActiveX
- Open Source tools:
- Lead came from:
[edit] The Project/Product
[edit] Project Background
LMS Medical Systems, Ltd. was founded in 1993. LMS was a University spin-off into a Montreal Corporation. James Turner, was the VP of business development and partner. With venture capital in 1996, LMS succeeded in their plans for CALM a project that was funded by a grant from the McGill University for perfecting a labor-monitoring system based on finding from a Dr. Emily Hamilton, Obstetrician and associated professor at McGill. The finding and data that is entered into the application is based on the expectant mother's examinations, medications and other facts turning up in irregular examinations. LMS is selling the development systems in Canada and U.S.
LMS was sold to another company in 2008 and was then acquired by McKesson in late 2009.
[edit] Project/Product Description
[edit] Buying Criteria
[edit] Business Priorities
- Development time was lower than Gemstone, Versant and Poet.
- Schema Evolution allows easy change in data model as the needs in the application and users change.
- Industrial Strength
- Fault Tolerant for large data base deployment.
- Partitioning replicates the database schema and catalog . Each partition is self sufficient.
- System Reliability - The CALM system is designed to provide obstetricians and nurses with comprehensive patient monitoring, information management and decision support capabilities by more precisely identifying fetal distress events. The critical information is to be stored in the database. Clinicians requirement to have the data at their fingertip and always available is paramount.
- Information Quality - The diagnostic information that the CALM system collects must have high integrity. A corruption in the information could be catastrophic. A clinician administers treatment to the patient based on the information collected in the CALM system. This is why information must be accurate.
- Quick Information Access - Clinicians must be able to recall histroical information on the patient and quickly react in emergency situations. Also fast access to statistical information is critical for patient diagnosis.
[edit] Technical Priorities
[edit] Competitors/Alternatives
Ease of Use comparison versus ObjectStore (Feb 98)
- DO NOT SEND THIS PARAGRAPH TO A PROSPECT ******************************
Mario wrote some benchmarks to compare the programming ease of use using Objectivity/DB and Object Design’s ObjectStore After reviewing the code, the Objectivity coding example was very ease to read, understand and make changes to without any difficulty. The code was then presented to ODI and they claimed they can write it better. So after they sent their version, the clarity of the Objectivity’s code was still better over their professionally written example. Each example was 1 page each.
With ODI’s code, they were endlessly Casting pointer – over riding the compiler - pointer pointing to object type B, then instructing the compiler to make the pointer point to Object C.
Learning curve
ObjectStore has a library of over 100 classes each with approximately 10 methods per class. This is a very rich environment and could represent a sizeable learning curve. The vendors claim that only a subset of the API is actually used for most applications. At least one ODI reference claimed that his team had to do a lot of fine tuning to achieve good performance. ODI recognizes this but maintains that the complex nature of that application called for the tuning.
Objectivity seems less complex. It also has tools to assist the developer in tuning as well as the capability of adjusting database parameters while the database is online. Developers can also adjust several tuning parameters within applications. In our opinion, Objectivity will requires less tinkering to achieve good performance.
Programming Objectivity is more straightforward. The following code fragments should demonstrate this. The functions CreatePersons() creates persons in one transaction and commit the insertions all at once. The UpdateAllPersons() function modifies the persons and checkpoints every modification. For simplicity all variables are first defined and then initialized. The ObjectStore code was provided by ODI. � Objectivity Examples
void CreatePersons(long l) { ooTrans trans; ooHandle(ooFDObj) fdbH; ooHandle(ooDBObj) dbH; ooHandle(ooContObjr) pc;
trans.start(); fdbH.open(FDB_NAME, oocUpdate); dbH.open(fdbH,DB_NAME,oocUpdate); pc = new(ALLPERSONS,1,10,40,dbH) ooContObj (ALLPERSONS);
for(long i = 0; i < l; i++) new(pc) Person("FirstName,"LastName");
trans.commit(); }
BOOL UpdateAllPersons() { ooTrans trans; ooHandle(ooFDObj) fdbH; ooHandle(ooDBObj) dbH; ooHandle(ooContObj) pc;
trans.start(); fdbH.open(FDB_NAME, oocUpdate); dbH.open(fdbH,DB_NAME,oocUpdate); pc.exist(dbH,ALLPERSONS,oocUpdate))
ooItr(Person) itr ; itr.scan(pc,oocUpdate); while(itr.next()) { itr->ooUpdate(); itr->SetFirstName("John"); trans.commitAndHold(); } trans.commit(); }
�ObjectStore Equivalent Examples
void CreatePersons(long l, os_reference &ref) { os_database *db; os_typespec *PersonType; os_transaction *txn; os_Bag<Person*>& allPersons;
db = os_database::open("test1.db", 0, 0667); PersonType = new os_typespec("Person"); txn = os_transaction::begin(); allPersons = os_Bag<Person*>::create(db, os_collection::maintain_cursors, l); ref = &allPersons;
for (long i = 0; i < l; i++) allPersons.insert(new (db, PersonType) Person("FirstName","LastName"));
os_transaction::commit(); delete txn; }
void UpdateAllPerson(os_reference &ref) {
os_database *db; os_transaction *txn; os_Bag<Person*> *allPersons; os_Cursor<Person*> *cur;
os_reference cur_ref;
db = os_database::open("test1.db", 0, 0667); txn = os_transaction::begin(); allPersons = (os_Bag<Person*>*)ref.resolve(); cur = new (db, os_Cursor<Person*>::get_os_typespec())
os_Cursor<Person*>(*allPersons, os_cursor::safe);
cur_ref = cur;
for (Person *p = cur->first(); cur->more(); p = cur->next()) { p->SetFirstName("John"); os_transaction::checkpoint(); cur = (os_Cursor<Person*>*) cur_ref.resolve(); } delete cur; os_transaction::commit(); delete txn; }
[edit] Why They Chose Objectivity
- Code - Unlike ODI, Objectivity did not appear to require as much training and performance tuning. LMS also like the fact that we guarantee integrity of objects by using object references. LMS also liked the transparency of our code.
Caching Mechanism - Like the ability to configure the size of the cache. Partnership - LMS felt more comfortable with Objectivity's reliability and performance than that of our competition. These are areas that could not be thoroughly tested, however in speaking with customers who have deployed applications, they were impressed with the high satisfaction with product and level of support.
- The target is better obstetrical care, including
reduced Cesareans, fewer critical situations and better handling of those situations, resulting in healthier, happier mothers and children. The tool is the Computer Assisted Labor Monitoring (CALM) system from LMS Medical. It provides real-time, multi-access monitoring for obstetrical care units, allowing doctors and nurses to keep informed of a patient’s moment-by-moment progress wherever they are -- at bedside, at a nurse's station, from a doctor's office, or other remote facilities. And more than monitoring, CALM permits comprehensive management and analysis of patient information, as well as decision support capabilities.
- LMS chose Objectivity/DB above other ODBMSs and RDBMSs for a
variety of critical advantages. With Objectivity/DB, LMS could get to market faster, with less training or performance tuning. LMS had confidence in the reliability and performance that Objectivity/DB has proven in so many industries and applications. And Objectivity/DB provides a superior caching mechanism that configures the size of the object cache.
[edit] Related Pages
[edit] External Links
- URL: Description of CALM
