Concurrency
Weak consistency would only be OK for applications where an insert or update is does not rely on a previous select.
For example, consider this common workflow:
- Read a record
- Let a user edit it
- Compute a new record based on the original record + the user's changes
- Save the record
This sort of workflow would not work so well under weak consistency, because the record read in step #1 may be out of date, and saving the record may stomp on another change that is already in flight. If you change FIRST_NAME and someone else changes LAST_NAME, one of you may lose your changes.
On the other hand, if you are inserting records where 100% of the data come from an external source, weak consistency may be OK. Some examples:
- An application that crawls the web and stores page information as it is discovered
- An application that emits debug logs
- A fire-and-forget audit logging mechanism
R/I
Weak consistency may not work so well if you have a lot of R/I. For example, if you are inserting a record that contains foreign keys, you can't be sure that the records with those foreign keys will still exist by the time your updates have propagated.
This would not be so much of an issue if your database doesn't allow deletes. For example, if you need to insert a Session record with a foreign key of UserID, and users are not allowed to be physically deleted, only disabled.
Identities and collisions
Any surrogate keys in a weakly consistent database would have to be globally unique; either a GUID or a compound key that contains the partitioning key. Otherwise, different nodes may end up inserting the same identity value and you will have a collision when the data propagate.