Perform domain sync within a single transaction
This increases data inconsistency and also performance of the whole update process: SqlAlchemy can use its own caching better with a single transaction as it does not need to mark already fetched objects as dirty and so re-fetch them again on later use. So after deleting a domain, we can still use the previously fetched domain objects for the update operations afterwards. Otherwise SqlAlchemy had to fetch each domain object again with single SELECT statements which leads to bad performance with many domains (>> 1000). The introduced "do_commit" variable controls whether the database changes are to be committed by the caller or in the called method itself. So we can use a single transaction for the Domain.update() method while still preserving the previous behavior for other callers. Closes #428.
Showing with 14 additions and 12 deletions