Хотя ответ Джастиса сработает, он мне не нравится, потому что для выполнения сканирования диапазона требуется OrderPreservingPartitioner. У ОПП много проблем, связанных с этим. Подробности смотрите в статье, на которую я постоянно ссылаюсь .
Вместо этого я бы порекомендовал это:
topic|YYMMDDHH: {TimeUUID: postID, TimeUUID: postID, etc... }
где «topic | YYMMDDHH» - ключ строки, каждое имя столбца - TimeUUID, а значения столбца - postID.
Чтобы получать последние сообщения по любой теме, вы получаете часть конца последней строки по этой теме. Если в этой строке недостаточно столбцов, вы переходите к предыдущему и т. Д.
Это имеет несколько хороших свойств. Во-первых, если вам не нужны действительно старые сообщения по теме, только относительно недавние, вы можете регулярно очищать старые строки и экономить место; это может быть сделано даже с TTL столбцов, так что вам не нужно делать никакой дополнительной работы. Во-вторых, ваши ряды будут ограничены по размеру, потому что они разделяются каждый час. В-третьих, вам не нужен OPP:)
Одним из недостатков этого является то, что если есть действительно горячая тема, один узел может получать больше трафика, чем другие, в течение часа за один раз.