Интересно, что я не вижу никого, кто упомянул бы возможность рассчитывать для каждого приложения на компьютере.Скажем, ваше приложение работает на 5 машинах с именами a1, a2, ... a5.Затем вы можете иметь блокировку для каждой машины (т. Е. Файл, который вы открываете с помощью O_EXCL или используете блокировку, чтобы дождаться выполнения других экземпляров с помощью счетчика) и добавить либо одну строку на машину, либо один столбец в зависимости от вашей реализации.Что-то вроде
machine_lock();
this_column_family[machine-name][my-counter] += 1;
machine_unlock();
Таким образом, вы получаете один счетчик на машину.Когда вам нужно общее количество, вы просто читаете a1, a2, ... a5 и суммируете их.
total = 0;
foreach(machines as m) {
total += this_column_family[m][my-counter];
}
(это псевдокод, который более или менее будет работать с libQtCassandra .)
Таким образом, вы избегаете блокировки, которая блокирует все узлы, и при этом вы все равно получаете безопасный / последовательный подсчет (очевидно, что чтение + сумма не идеальна, и она только дает вам приблизительное значение, но все равноостается последовательным.)
Я не слишком уверен, было бы то же самое, что указал Бен Бернс в отношении наличия n осколков и n нитей, но для меня это не совсем похоже.
А начиная с версии 0.8.x вы можете использовать счетчики Cassandra, что, безусловно, намного проще, хотя может не всегда соответствовать вашим потребностям.