В дополнение к опциям, которые дает Ник, вы можете рассмотреть возможность использования счетчика.
Сохраните несколько счетчиков и выберите один для обновления таким образом, чтобы (в идеале) это невозможно (или, если это не удалось), маловероятно, что любые два запроса одновременно выберут один и тот же осколок.
У вас есть другие варианты. Вы можете сделать транзакцию с осколком в качестве родителя (это уменьшает конкуренцию по сравнению с одним счетчиком), хотя в итоге у вашей новой сущности транзакции будет произвольно выбран родительский объект. Или не связывайтесь с транзакцией, в этом случае вам, вероятно, придется время от времени фиксировать счет, как с опцией Ника для транзакций.
Чтобы прочитать общее количество, вы складываете все осколки. Вы не будете читать их все «одновременно», но обычно это нормально. Считывая любой счетчик, он может увеличиваться между тем, когда вы его читаете, и когда вы используете значение, поэтому значение на самом деле является просто нижней границей. Добавление осколков ничем не отличается, за исключением того, что, вероятно, это займет больше времени.