2007/6/28, Ian Eslick <[EMAIL PROTECTED]>:

Just a few short comments:

1) I think that DBs are designed for certain kinds of short-running
transactions, but over time have been co-opted into supporting longer
and more complex ones.


Which DBs are you talking about in particular? I'm interested in open-source
ones with this kind of transaction support.

2) User interaction takes place in a completely different domain and
I think that the constraints of that domain should not be conflated
with the low-level DB semantics.


That is true. But I also think that UI semantics should not be confalted
with DB semantics. In practice, I usually end up sacrifying some kinds of UI
interactions because of how the DB world behaves. I don't like the
separation there is from the application and the DB. I don't like the DB
being such a black box. I wish they could interact better.

3) As for user interactions like checkout; I think you probably want
to implement your own dependency tracking, for example a multi-stage
process for buying tickets.  Here we use two levels of transactions
and a DB field to perform application-level locking.

GUI:
User searches for and selects some tickets.  Those tickets are added
to a user record that can be non-durable (simple, in-memory object)
or durable (a database record updated after every page refresh)
depending on the criticality of the application.

DB:
Short transaction moves these from an available state to a pending
state with a timestamp and a reference to the user record so it can
be automatically reclaimed if the user fails to complete the order in
a certain timeframe.

GUI:
User goes through several steps, updating the user record at each
step and then committing the order.

DB:
Transaction: change the ticket state to pending payment, user record
updated to record the order info

Network:
Billing confirmation

DB:
Transaction: update ticket to purchased, user record to complete
purchase, drop user object

GUI:
Send final confirmation to user.


Here we have a user-visible transaction implemented in a set of DB
transactions.  Each DB transaction is short lived, even if the user
transaction lasts minutes.


Yes, but a set of DB transactions is not semantically equivalent to just
one. It may work in practice (that's the way we all do it), but it looks
more like a work around than a natural solution.

What is the default policy used for SQL-based web frameworks in PHP,
Ruby-on-Rails, Java, etc?  This can't be the first time this question
has been asked and answered.


I can tell you from my experience  developing in PHP and MySQL. These
problems are addressed simulating a transaction with a set of little ones,
sacrifying UI design and usability and ignoring some consistency issues.

I'm not just theorizing about these issues. We have developed a web
framework and would like to generate some interfaces automatically.
Unfortunately, this issues are pulling us back in some cases.

Mariano
_______________________________________________
elephant-devel site list
elephant-devel@common-lisp.net
http://common-lisp.net/mailman/listinfo/elephant-devel

Reply via email to