У меня возникла проблема, когда несколько команд INSERT рассматриваются как отправляемые одновременно на стороне Cassandra, когда мой код явно не отправляет их одновременно. (Когда в сети возникает небольшая перегрузка, возникает проблема, в противном случае все работает просто отлично.)
То, что я думаю, решило бы эту проблему, является способом для меня, чтобы быть в состоянии указать WRITETIME самостоятельно. Из того, что я помню, это было возможно в экономном, но, возможно, нет (то есть мы могли бы прочитать это наверняка.)
Так что-то вроде этого (для имитации TTL):
INSERT INTO table_name (a, b, c) VALUES (1, 2, 3) USING WRITETIME = 123;
Проблема, с которой я сталкиваюсь, заключается в перезаписи одних и тех же данных, и время от времени обновление игнорируется, потому что оно заканчивается той же или даже более старой отметкой времени (возможно, потому что оно отправляется на другой узел, а время каждого узла немного отличается, и так как процесс C ++ использует потоки, он может быть отправлен до / после без вашего контроля …)
Волшебный синтаксис, который вы ищете:
INSERT INTO tbl (col1, col2) VALUES (1,2) USING TIMESTAMP 123456789000
Будьте очень осторожны при использовании этого подхода — убедитесь, что вы используете правильные единицы измерения (обычно микросекунды).
В некоторых случаях вы можете переопределить значение меток времени — это хитрый трюк, который мы использовали в прошлом, чтобы делать умные вещи, такие как первые записи-выигрыши, и даже хранить значения в таблице лидеров в поле TIMESTAMP, чтобы наивысший балл сохранялся, но Вы должны ДЕЙСТВИТЕЛЬНО понять концепцию, прежде чем пытаться это (удаление становится нетривиальным)
Других решений пока нет …