Как устранить проблему с «одновременной записью в списки кассандры, когда данные в списках смешиваются»? - PullRequest
0 голосов
/ 30 апреля 2019

Я написал Java-программу для выполнения операции upsert на моей базе данных cassandra, которая состоит из таблицы, содержащей несколько списков, и с использованием моего кода Java. Я пытаюсь записать во многие такие списки одновременно, предположим, запись 10в какой-то момент, но когда я просматриваю свою таблицу cassandra, значения в списках не сохраняются синхронизированным образом, некоторые из значений меняют свое место с первоначальной позиции, хотя временная метка верна для каждого значения, но каким-то образом список непредставлены в правильном порядке.Совместное использование файлов и примеров кода, которые могут помочь выявить проблему.

String newInsertQuery1 =  "UPDATE events.generated_event SET attributes = ['100'] + attributes, channels = ['100'] + channels, " + "event_types = ['100'] + event_types, ip = ['100'] + ip, library_info = ['100'] + library_info, property_ids = ['100'] + property_ids," + "texts = ['100'] + texts, user_agent = ['100'] + user_agent WHERE profile_id = '1111' AND project_id = '5bbc83f4bf52016962b695da' AND bucket_id = 1555977600000"; 

String newInsertQuery2 =  "UPDATE events.generated_event SET attributes = ['300'] + attributes, channels = ['300'] + channels, " + "event_types = ['300'] + event_types, ip = ['300'] + ip, library_info = ['300'] + library_info, property_ids = ['300'] + property_ids," + "texts = ['300'] + texts, user_agent = ['300'] + user_agent WHERE profile_id = '1111' AND project_id = '5bbc83f4bf52016962b695da' AND bucket_id = 1555977600000";

String newInsertQuery3 =  "UPDATE events.generated_event SET attributes = ['400'] + attributes, channels = ['400'] + channels, " + "event_types = ['400'] + event_types, ip = ['400'] + ip, library_info = ['400'] + library_info, property_ids = ['400'] + property_ids," + "texts = ['400'] + texts, user_agent = ['400'] + user_agent WHERE profile_id = '1111' AND project_id = '5bbc83f4bf52016962b695da' AND bucket_id = 1555977600000";

аналогично запросу 4, 5, 6, 7.

Я создал много потоков, работающих наВ то же время каждый поток выполняет один запрос.

ожидаемый результат:

 profile_id   | 1111
 project_id   | 5bbc83f4bf52016962b695da
 bucket_id    | 1555977600000

 anonymous_id | 150698a7-5d02-f634-3c8d-4d7bf615f13e

 attributes   | ['300', '700', '400', '600', '500', '800', '00']

 channels     | ['300', '700', '400', '600', '500', '800', '00']

 event_types  | ['300', '700', '400', '600', '500', '800', '00']

 ip           | ['300', '700', '400', '600', '500', '800', '00']

 library_info | ['300', '700', '400', '600', '500', '800', '00']

 property_ids | ['300', '700', '400', '600', '500', '800', '00']

 texts        | ['300', '700', '400', '600', '500', '800', '00']

 timestamps   | null

 user_agent   | ['300', '700', '400', '600', '500', '800', '00']

Фактический результат:

 profile_id   | 1111
 project_id   | 5bbc83f4bf52016962b695da
 bucket_id    | 1555977600000
 anonymous_id | 150698a7-5d02-f634-3c8d-4d7bf615f13e

attributes   | ['300', '700', '500', '400', '800', '600', '00']

channels     | ['300', '700', '400', '600', '800', '500', '00']

event_types  | ['300', '700', '400', '600', '500', '800', '00']

ip           | ['300', '700', '400', '600', '500', '800', '00']

library_info | ['300', '700', '400', '600', '500', '800', '00']

property_ids | ['300', '700', '400', '600', '500', '800', '00']

texts        | ['300', '700', '400', '600', '800', '500', '00']

timestamps   | null

 user_agent   | ['300', '700', '400', '600', '500', '800', '00']

Прикрепленное изображение состоит из выходных данных команды sstabledump, и, как вы можете видеть, tstamp одинаковы для значений, скажем, 800 в каждой строке, но когда я выполняю чтение по этой таблице, напечатанные мне значения не сортируютсяони печатаются в том же порядке, что и в sstabledump

1 Ответ

0 голосов
/ 01 мая 2019

Если вы используете несколько запросов в одной строке, выданных разными потоками, вы не можете гарантировать, что обновления будут выполняться в определенном порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...