Если вы можете добавить предположение о том, что в адресных книгах обычно содержится менее 10 000 записей, то использование одного ряда на строку времени в адресной книге в семействе суперколонок будет приемлемым подходом.
Строка будетвыглядят так:
{'address_book_18f3a8':
{1290635938721704: {'entry1': 'entry1_stuff', 'entry2': 'entry2_stuff'}},
{1290636018401680: {'entry1': 'entry1_stuff_v2', ...},
...
}
, где ключ строки идентифицирует адресную книгу, каждое имя столбца super является меткой времени, а подколонки представляют содержимое адресной книги для этой версии.
Это будетпозволяют читать последнюю версию адресной книги только с одним запросом, а также писать новую версию с одной вставкой.
Причина, по которой я предлагаю использовать это, если в адресных книгах меньше 10 000 элементов, заключается в том, что супер-столбцыдолжен быть полностью десериализован, когда вы читаете хотя бы один вложенный столбец.В целом, не так уж и плохо в этом случае, но об этом следует помнить.
Альтернативный подход состоит в том, чтобы использовать одну строку для каждой версии адресной книги и использовать отдельный CF с строкой временной шкалы.для каждой адресной книги, например:
{'address_book_18f3a8': {1290635938721704: some_uuid1, 1290636018401680: some_uuid2...}}
Здесь some_uuid1 и some_uuid2 соответствуют ключу строки для этих версий адресной книги.Недостатком этого подхода является то, что он требует два запроса каждый раз, когда читается адресная книга.Плюс в том, что он позволяет эффективно читать только отдельные части адресной книги.