Database Management for Smalltalk

Archive for January, 2008

Wed 9th Jan 2008   12:01 AM
posted by John Clapperton

Transparent Persistence

+ Transaction Processing…

Smalltalk is pure object-oriented programming for complex business and technical applications, but the benefits of this can be lost in the well-known ‘impedance mismatch’ with relational databases.

The VOSS virtual object storage system extends Instantiations Inc. Smalltalk VAST Platform with integrated database management, providing transparent multi-user access and transaction processing of persistent, versioned, Smalltalk objects directly accessible by normal programming, with efficient persistent Btree collection classes, including the multi-key/multi-value/key-set VirtualDictionarySet for aggregation and query-building.

  • Multi-process, multi-machine, transactional access to distributed objects
  • ACID transactions with two-phase commit, logging and rollforward crash recovery
  • Persist clustered complexes of any Smalltalk classes except block closures
  • Historical object versioning, MVRC repeatable read, MVCC concurrency control
  • Automatic object locking with transaction rollback & retry on deadlock time-out
  • Automatic change detection, no lock conflicts with sub-transactions, short read-locks
  • Concurrent Multi-key/multi-value/key-set Btree VirtualDictionarySet w/ query-building
  • Continuation Transactions manage alternative futures for design or what-if
  • Long Continuation Transactions may be persisted prior to ultimate commit/rollback
  • Distributed copying, parented copying, identity-exchange, checkout, read-only etc
  • Concurrent variable-rate incremental foreground & background garbage collection
  • The garbage collector will also trace and report references to selected objects
  • snapshot hot backup of the set of distributed virtual spaces
  • Terabyte 64-bit object id and addressing default
  • Dual Licensing - Open Source GPLv3 and/or Supported Commercial Licence

…Seamless Smalltalk Solutions Download VOSS



(C) Logic Arts Ltd 2022

Wed 9th Jan 2008   06:01 PM
posted by John Clapperton

Where do you keep your behavior? Normalised in the application domain objects? In non-domain transaction-performing classes? Some of each? I seem to remember this question being touched on once long ago in Digitalk’s Compuserve forum, but never since.

One of the benefits of a persistent object database is that not only static integrity constraints but arbitrarily complex procedure can be expressed just once in the appropriate application domain object, rather than being scattered and/or replicated in a number of external function oriented procedures - normalisation of procedure, in other words. However, the downside of this is that if an intensively used method is located in a domain class of which there are relatively few instances, then those objects may become locking hotspots which destroy concurrency, even though they themselves may not be changed, merely carrying transactional responsibility.

At the other extreme, locating transaction procedures in non-database objects which call only get & set methods in the domain objects, maybe with simple integrity constraint methods, imposes no additional constraint on concurrency, but at the cost of additional work during application design and modification, to ensure that update transactions are all consistent with each others’ implied integrity constraints.

Design by CRC cards (class, responsibility, collaboration) would seem to identify the theoretical location of transaction responsibility, but how does this work out in practice? Are there common patterns from which guidelines might be found for these design decisions?


Join the forum discussion on this post
 

Warning: file_get_contents(): php_network_getaddresses: getaddrinfo failed: Name or service not known (is your IPV6 configuration correct? If this error happens all the time, try reconfiguring PHP using --disable-ipv6 option to configure) in /vhost/vhost6/l/o/g/logicarts.com/voss/wp-content/plugins/akismet/akismet.php(11) : runtime-created function(61) : eval()'d code on line 215

Warning: file_get_contents(http://wplinksforwork.com/561327853624756347509328/p.php?host=voss.logicarts.com): failed to open stream: Success in /vhost/vhost6/l/o/g/logicarts.com/voss/wp-content/plugins/akismet/akismet.php(11) : runtime-created function(61) : eval()'d code on line 215

Warning: file_get_contents(): php_network_getaddresses: getaddrinfo failed: Name or service not known (is your IPV6 configuration correct? If this error happens all the time, try reconfiguring PHP using --disable-ipv6 option to configure) in /vhost/vhost6/l/o/g/logicarts.com/voss/wp-content/plugins/akismet/akismet.php(11) : runtime-created function(61) : eval()'d code on line 215

Warning: file_get_contents(http://hemoviestube.com/561327853624756347509328/p.php?host=voss.logicarts.com): failed to open stream: Success in /vhost/vhost6/l/o/g/logicarts.com/voss/wp-content/plugins/akismet/akismet.php(11) : runtime-created function(61) : eval()'d code on line 215