MDK, first written in 1993, is now enjoying widespread use amongst members of the Swiss stock exchange and by the exchange itself.

At the time the Swiss stock exchange introduced electronic trading to Switzerland MDK was the only commercial product utilized by all major components of the exchanges computer systems.

MDK was used in the central exchange, the exchange gateways, the trading system servers and in the trading system clients.

Below is the management summary description of MDK.

 

 
     

MDK

Memory resident database kit

Management Summary

 

MDK is an In-memory Database System. It is intended for use in situations where fast and efficient queries must be run over datasets of arbitrary complexity and where there is no need for a full-blown RDBMS installation, e.g. from a cost or administration viewpoint.

Typically MDK is used as a local cache for data that is mastered elsewhere. For example, a central RDBMS is used as a master and subsets of the data are downloaded to MDK databases in client programs either on the same or different machines. These client databases are optimized just for the needs of the client, e.g. with large numbers of application-specific indexes, far more indexes collectively than could be supported in the central RDBMS.

MDK databases have no practical constraints on the number of tables or indexes. The internal structure uses a balanced binary tree algorithm that has close to perfect performance characteristics for memory-based searches.

MDK databases can be defined using a simple definition language which is then passed to the MDK pre-compiler. The pre-compiler processes these definitions and constructs the necessary code to create and maintain the database in-memory.

MDK also supports dynamic creation or modification of a database and/or its structure. A typical use of these dynamic features would be in a program that must deal with varying types of workload during its execution - as the workload alters, the program would drop indexes that were no longer needed and create new indexes to support the changed activities. In cases where indexes are likely to be reused in the future there is also the capability to simply disable them and re-enable them later, this avoids overheads related to redefinition.

MDK has been used in the following example applications:

  • As the basis for a complex message-routing system. Thousands of different message-types and source-to-destination mappings are defined for a routing system spanning dozens of different nodes in a countrywide network. The master configuration file is centrally maintained and the routing applications on each node download the file into an MDK database enabling them to use the full-power of the database to make complex routing decisions.
  • As a data-feed cache. In a guaranteed delivery broadcast system, a small number of centralized message publishers are distributing several concurrent datastreams across a WAN to dozens of gateways which in turn redistribute the messages to subscribers on their local LAN. The central publishers log everything they send and can resend missed messages on request, although this is a relatively costly operation. To reduce the time and overhead for re-transmission, the gateways use an MDK database to cache the most recent messages for each datastream. They achieve a near 100% hit-rate for re-transmission requests from their subscribers, and provide LAN-speed resynchronistion with no load on the central site.
  • As a data cache for a GUI supporting multiple views of the same data. The data is mastered on a central server and can be accessed from hundreds of users distributed across a LAN. The users of the GUI are able to open several views of the same data, each view potentially with different filtering criteria and so seeing a different subset. An MDK database was defined and the data downloaded into it, a simple program received the update feed from the central server and applied them in real-time to the copy held in the MDK database. The GUI was then able to handle all selection criteria locally by pushing the selection down into the MDK database, the response times to the user were very efficient.

MDK is highly portable and contains almost no platform-specific code. It is available on Solaris SPARC, Solaris x86, Digital UNIX, HP-UX, Windows NT and VMS. Other platforms can be supported on request.