многие ваши проблемы отвлекаются СУБД. Обычно вам не нужно подчеркивать вещи, связанные с потоком / параллелизмом. Что вы можете сделать, так это группировать вставки / обновления / запросы в транзакции, чтобы сделать их более атомарными и гарантировать, что все или ничего не происходит. такие транзакции можно откатить, если, например, они частично мешают.
Вы не упоминаете, какую БД вы используете, но вот небольшое введение в транзакцию, не зависящее от БД. Конечно, вы также должны проверить официальную документацию для вашей базы данных.
http://www.sqlteam.com/article/introduction-to-transactions
Что касается того, «что не принадлежит в базе данных», то изображения и большие куски текста в порядке. Вы можете хранить двоичные двоичные объекты, вы можете хранить код, если это имеет смысл для того, что вы делаете. Единственное, что я хотел бы предложить, - это подумать о том, в ваших ли интересах непосредственное хранение изображений в БД или сохранение путей / имен файлов для файлов, находящихся на вашем сервере.