Database Management for Smalltalk


Summary of Features

  • VOSS gives transparent access to persistent Smalltalk objects in named virtual spaces. Virtual objects may be distributed amongst multiple virtual spaces to localize access and optimize network usage, volatility and garbage-collection.
  • Existing application classes may be made virtual with full granularity control.
  • Transactions which change virtual objects have full ACID properties through two-phase commit, logging and rollforward crash recovery, protecting database integrity against unhandled exceptions, operating system crashes or random power failure. Transactions may include objects in any number of virtual spaces and may be created explicitly open-ended or implicitly by atomic evaluation of Smalltalk blocks, nested as required under the default Top open transaction of each Smalltalk process enabled by a VOSession.
  • Transactions may be Versioning, retaining historical states for MVRC/MVCC.
  • Continuation Transactions are expected to be used for exploratory ‘what-if’ and design applications, and/or management of multiple, timestamped, web-browser pages which reference some or all of the same objects. Continuation Transactions, with their sets of alternative futures, may be persisted whilst remaining open (’Long Transactions’), allowing repeated shutdown and restart during long application tasks.
  • Transparent object-level locking allows multiprocessing and network-wide access with a high degree of concurrency even for long interactive transactions, and block-structured transactions have automatic rollback and retry on deadlock timeout. Explicit individual object locking is available for hotspot optimisation etc.
  • Continuous lock retry until time-out relieves the application from handling temporary lock conflicts.
  • User-specified transaction degree of isolation.
  • Transactions may be nested and there are no lock conflicts between nested transactions and their parents. This is essential for normal method re-use, allowing existing methods which start new transactions to be freely called from others without lock conflicts. Nested transactions commit or rollback from the inside out and there is full rollback on un-handled exception.
  • Virtual B-tree collections provide efficient access to large numbers of objects. These include the multi-key/multi-value/key-set VirtualDictionarySet with query-building methods. Keying on method selectors rather than instance variables allows query drill-down without the need for special language syntax extensions.
  • VOSS may be installed on either the desktop client and/or on the server. Server page caching is fully utilized and pre-allocation and instantiated object caches with transparent timestamp-controlled refresh reduce disk access.
  • Database Administration facilities provide for current user query, forced log-off and management of backup, restore, transaction logging, rollforward, flushing, garbage-collection etc.
  • Concurrent background garbage-collection avoids down-time for an otherwise lengthy operation and the garbage-collection workload may be balanced around the network as required, according to machine usage and locality, with visible progress indication.
  • Maximum size of each virtual space and number of objects in it are user-configurable up to 2^128, within file system limits.
  • There is no hard limit on the number of concurrent users per virtual space nor any storage overhead per object per user.
  • Dynamic class token allocation for compact storage requires no management and allows classes to be renamed by an ordinary transaction. For more complex changes, an application may replace objects with instances of re-shaped classes using virtual objects’ identity-exchange feature.
  • Virtual objects have facilities for access to their historical versions via timestamp or enumeration, parented copying (i.e. system-maintained hidden references between parent and chidren), identity-exchange, low-level poke etc. for special application requirements.
  • Dynamically loadable at runtime to minimize memory requirements.
  • Documentation includes interactive tutorial with examples of major functions and a discussion of object database design in Smalltalk.