Magma: Concurrent access to the same data
peter.schuller at infidyne.com
Tue Oct 21 20:59:25 UTC 2003
I have been toying with magma off and on for a while now, and I like it a lot
for obvious reasons (transparency!). There is one problem though that I am
not sure how one is supposed to solve with Magma - or simliar OO databases /
persistence layers in general.
When there is a conflict during a commit (i.e., someone else changed the data
first), a MagmaCommitError is raised. This is fine when there is a "real"
conflict at the application layer (such as two people simultaneously
modifying the description of an object). However, there are instances where
conflicts are *expected*. Or rather, where one would, in a multi-threaded
situation, use a semaphore/lock to control access to critical data.
* Incrementing a value (x := x + 1, where x is persistent)
* Adding an object to a Collection (not a MagmaCollection)
* Creating a shared resource on demand
Examples (contrived, obviously):
session commit: [
"Assuming there is no need to index relationships:"
person friends addLast: newFriend.
And concurrently on another client:
session commit: [
person friends remove: previousFriend.
Assuming newFriend is not referencing the same object as previousFriend, the
two actions are not "really" in conflict; one would not want to have to retry
such an operation due to the modification of the same Collection for
Another example would be maintaining, for example, a counter for the total
number of, say, employees who have ever worked at a company (without
maintaining the actual list of employees). How can I increment such a counter
without causing a conflict if two employees happen to be added to the
database almost at the same time (which, at the application/problem/user
level is not a conflicting action)?
/ Peter Schuller, InfiDyne Technologies HB
PGP userID: 0xE9758B7D or 'Peter Schuller <peter.schuller at infidyne.com>'
Key retrieval: Send an E-Mail to getpgpkey at scode.org
E-Mail: peter.schuller at infidyne.com Web: http://www.scode.org
More information about the Squeak-dev