ACID in Theory and Practice
danweinreb.org
danweinreb.org
A good example of bumps you might hit is a problem I encountered a while ago: the default level of transaction isolation in postgres is “Read Committed”, not “Serializable” as the SQL standard mandates. This sounds fine, until you get constraint violations under load because of race conditions. See http://jan.rychter.com/enblog/2009/6/6/postgresql-transactio... if you want the full story.
BTW, I suspect problems like the one I encountered exist in lots of software systems, they just rarely get discovered.
START TRANSACTION MODE READ REPEATABLE;
or something like that. It would seem to be a way to only use the extra resources when consistency is paramount. Of course it would take a lot of careful thought to determine which transactions need this mode...A counterpoint to the nobody really uses full isolation levels is VoltDB. Due to it’s unique single-threaded architecture, it can ONLY perform transactions with full serializability guarantees, and it does it with remarkable performance. Our head of field engineering, Tim Callaghan, used to be a die-hard Oracle user and he keeps saying how refereshing it is to actually not have to think about concurrency.
Not sure why this comment was a reply to me though. I've never claimed all NoSQL is EC, not all SQL/Relational is ACID. I totally agree there is a lot of unfortunate confusion, though I wouldn't limit the blame.
"Due to it’s unique single-threaded architecture..."
That would be a single thread per partition, right? Are those partitions automatic or might a developer have to consider their creation carefully based on how data will be accessed? And replication? Seems concurrency _is_ something about which developers have to think. Here's the entry in the VoltDB FAQ: http://community.voltdb.com/faq#id545447
"...how refereshing it is to actually not have to think about concurrency."
Except you do. By figuring out the partitioning and replication up front. TANSTAAFL, regardless of our level of enthusiasm for our employers.
What I meant was, inside of a stored procedure itself, you never have to think about concurrent access to the data you are modifing during the lifetime of the procedure. You own it. Period.
I wouldn't ever try to make the argument that this functionality is "free" and that VoltDB is a system without tradeoffs. It just seemed particularly relavent when the original article was making claims that serializable transaction semantics in SQL-RDBMSs were rare due to performance issues. I didn't mention NoSQL or Key-Value stores anywhere in my original comment.
Key-Value stores are a mechanism for storing arbitrary data (i.e. values) based on individual keys. Distributing Key-Value stores is simple, since there is only one key. However, there is no structure within the data store and no transactional reliability provided by the system.
If you want to complain about our marketing, feel free to email Fred Holahan (fholahan at voltdb.com). He didn't write everything on our website, but he's in charge.
i couldn't read his blabber past this point. Before talking about something you don't know about, check the docs at least:
---
http://download.oracle.com/docs/cd/B28359_01/server.111/b283...
"Oracle Database offers the read committed and serializable isolation levels, as well as a read-only mode that is not part of SQL92. Read committed is the default."
---
To make it clear:
1. there is no READ REPEATABLE in Oracle
2. in general, among the isolation levels, READ REPEATABLE isn't the strongest