Обеспечение синхронного чтения-записи в Кассандре
У меня есть кластер Cassandra, который будет использоваться несколькими клиентами. У меня есть таблица (давайте назовем ее "Счетчик") в моем пространстве ключей, которую я использую для хранения количества записей в других таблицах.
Всякий раз, когда новая запись должна быть вставлена в какую-либо таблицу, сначала будет запрошена таблица "Счетчик", чтобы узнать количество записей уже внутри этой таблицы, а затем она будет увеличена после добавления новой строки в таблицу.
Поскольку существует несколько клиентов, как я могу гарантировать, что 2 клиента одновременно не будут пытаться читать / писать в таблице "Счетчик".
Мой кластер на 3.11.2.
1 ответ
Вы можете использовать счетчики и приращение для новой записи: https://docs.datastax.com/en/cql/3.3/cql/cql_using/useCounters.html
Или легкие сделки. Если значение применяется, вы знаете, что никто больше не читал / записывал в это время - если они у вас есть, просто повторите попытку. https://docs.datastax.com/en/cassandra/3.0/cassandra/dml/dmlLtwtTransactions.html
Может быть хорошо написать какую-то работу, которая может быть запущена, которая сканирует и подсчитывает записи и сравнивает их с текущим значением. Несоответствия между вашими 2 таблицами возможны, если происходит сбой узла между инкрементом и вставленной новой записью.