Как упорядочить данные в Кассандре, чтобы получить данные последними в формате "первый вышел"
Так как мы не можем сортировать данные в Cassandra, я хотел сохранить данные в таком формате, чтобы при получении данных мне нужно было получать данные в формате "последний пришел первым", т. Е. Если пользователь вводит комментарии, когда я получаю данные, я должен сначала получить данные. сначала самый последний комментарий, а затем старые комментарии. Я думаю, что это как-то связано с компаратором.
Я настроил следующее при настройке Cassandra:
assume posts comparator as utf8;
assume posts validator as utf8;
assume posts keys as utf8;
Пожалуйста, помогите - как мне создать столбец, чтобы упорядочить данные в формате времени так, чтобы самые последние данные сохранялись первыми?
2 ответа
Столбцы в строке всегда сортируются, и вы можете перебирать столбцы в строке в обратном порядке. Учитывая эти два аспекта, мы можем смоделировать ситуацию, которую вы описываете, сохраняя комментарии в семействе столбцов, называемом "комментарии", где ключ строки - это идентификатор сообщения, а столбцы представляют комментарии к соответствующему сообщению. Столбцы представляют собой временные метки (даты в формате ISO, временные метки UNIX или UUID времени), а значения являются текстовыми телами комментариев.
Если бы вы теперь получили столбцы для строки и указали, что хотите их в обратном порядке, вы получите то, что хотите. Как задать обратный порядок, зависит от вашего драйвера, но обычно это просто опция для команды, которая извлекает строку или фрагмент столбца.
Другой способ, который является более хакерским, состоит в том, чтобы взять метку времени UNIX сообщения и вычесть ее из большого целого числа, такого как 2^31, и использовать его в качестве ключа столбца. Таким образом, столбцы будут сортироваться в обратном порядке по умолчанию. Это не красиво, и вышеописанный метод более элегантен.
Если вы беспокоитесь об использовании временных отметок, поскольку могут возникнуть коллизии, когда два комментария публикуются в одно и то же время, используйте тип UUID времени Cassandra.
Вам необходимо организовать свои данные так, чтобы компаратор представлял собой временную метку. Вы сохраняете свои данные в естественном порядке и указываете обратный порядок в запросе среза.