Можно ли отсортировать GET для семейства столбцов Cassandra по значению Timestamp, созданному для каждой записи столбца, а не по ключам столбца? - PullRequest
2 голосов
/ 13 июня 2011

По сути, у меня есть «строка потока», в которой создаются новые потоки, а в качестве ключа используется TimeUUID.Который, очевидно, обеспечивает сортировку нового потока довольно легко, особенно когда, скажем, делается запрос из последних 20 потоков и т. Д.

Моя проблема заключается в том, что когда новое сообщение создается в потоке, я хочу иметь возможностьчтобы «поднять» этот поток в начало «строки потока», в которой и возникает проблема, как я могу в основном сделать это, чтобы я мог делать запросы, которые все еще можно выбирать в правильном порядке, не предоставляя какого-либо видадубликаты и т. д.

Единственный способ увидеть эту работу - это если вместо сортировки семейства столбцов по TimeUUID мне нужно сортировать семейство столбцов по метке времени вставки, поэтому я могу использовать уникальные идентификаторы потоков для столбцов.ключи и получить их в порядке их вставки или повторной вставки, а не по TimeUUID?Это возможно, или я упускаю простой трюк, который учитывает это?Насколько я знаю, вы должны установить конкретный компаратор или иначе он по умолчанию в байтах?

1 Ответ

5 голосов
/ 13 июня 2011

Столбцы в строке всегда сортируются по имени с данным компаратором.Вы не можете сортировать по отметке времени, значению или чему-либо еще, иначе Cassandra не сможет правильно объединить несколько обновлений в один и тот же столбец.

Что касается вашего варианта использования, я могу представить два варианта.

Самое похожее на то, что вы делаете сейчас, - это создание второго семейства столбцов ThreadMostRecentPosts со столбцами timeuuid (вы сказали «ключи», но звучит так, как будто вы имеете в виду «столбцы»).Когда приходит новое сообщение, удалите старый самый последний столбец и добавьте новое.

У этого есть две проблемы:

  • Единицей репликации является строка, поэтому наличие этогоРасти до бесконечности может быть проблематично.(Использование устаревших столбцов для устаревания устаревшей информации о ветках может помочь.)
  • Вам нужен менеджер блокировок, чтобы несколько сообщений в одной и той же ветке не гонялись и, возможно, уходилинесколько записей в этой строке.

Я бы предложил вместо этого создать строку в день (например), столбцы которой - идентификаторы потоков, а значения - самые последние сообщения.Добавление нового сообщения просто обновляет значение в этом столбце;удаление / повторное добавление не выполняется, поэтому гонки больше не являются проблемой.Вы больше не получаете сортировку бесплатно, но это нормально, потому что вы ограничиваете ее достаточно маленьким набором, чтобы вы могли выполнять эту сортировку в памяти (скажем, вчерашние потоки и сегодняшние).

(Наконец, яЯ бы добавил, что по своему опыту могу сказать, что иметь обрезание, когда старые темы не сталкиваются с новым ответом, - это хорошо.)

...