Cassandra Insert / Update без дублирования, когда вы не можете полагаться на первичный ключ или UUID - PullRequest
0 голосов
/ 09 января 2020

Вот проблема.

Наши «клиенты» регулярно попадают в систему как часть массовой загрузки файлов (CSV) от клиентов. Данные, которые мы получаем от них, - это Имя, Адрес, Почтовый индекс, Номер ссылки клиента.

Мы сохраняем их в «Таблицу клиентов» Кассандры.

Когда мы делаем это, мы назначаем UUID который мы затем используем во всей остальной системе.

Вопрос касается первичных ключей… у нас есть два варианта: 1) UUID в качестве первичного ключа или 2) составной первичный ключ (имя, адрес, почтовый индекс) .

Проблема с этими опциями: 1) у нас нет UUID при первоначальной вставке, возможно, что «клиенты» дублируются, так как же мы дупилируем? Получить (выбрать) с последующим upsert будет неэффективно. 2) имеет несколько проблем: а) если мы выполним операцию обновления, есть вероятность, что UUID может быть перезаписан… б) есть также проблема, что имя, адрес, почтовый индекс не могут быть обновлены, так как они составной первичный ключ ... а) может не быть проблемой, так как изменение UUID вызовет событие, которое будет получено другими заинтересованными службами ... но отчасти удаляет точку UUID ... b) мы можем сохранить поля псевдонимов (AKA) для клиентов, которые предпочитают или обновляют данные, сохраняя при этом исходные данные для справки… хотя это кажется неуклюжим.

Предпочтительнее, и самым простым способом будет go для варианта 1, но без использования первичного ключа для начального создание - не уверен, что это возможно? При выборе варианта 2 нам также нужно будет обновить все поля, кроме столбца UUID ...

1 Ответ

2 голосов
/ 10 января 2020

Вы действительно можете использовать UUID в качестве ключа раздела, если знаете заранее. Вы не сможете вставить новых клиентов в таблицу, если у вас нет UUID.

На основании вашего описания вы используете UUID в качестве уникального идентификатора для остальной части вашей системы, так что это действительно является идеальным ключом раздела. Однако вам нужно будет найти решение для ситуаций, когда у вас нет UUID клиента. Ура!

...