I wouldn’t give up on postgres so easily. It can handle crazy loads. Also, in the first thread, I think you are confusing the ACID guarantees of a relational database with something that ecto/ActiveRecord control. Every time you run a SQL query on your database it is a transaction, you can run multiple queries in one transaction too (Ecto, allows this by using the Repo.transaction
and Ecto.Multi
). Activerecord has transaction support too:
ActiveRecord::Base.transaction do
david.withdrawal(100)
mary.deposit(100)
end
When it comes to database transactions, changes that haven’t been committed aren’t visible to other transactions and only become visible once they are committed.
---T1
BEGIN;
INSERT INTO users(id, email, login_count) (1, 'dan', 10);
-- T2
--- T3
COMMIT;
Any database transaction at T1 or T2 does not see the new record user#1 in the database till the transaction is committed which happens at T3. These are database level guarantees.