2012-04-21 4 views
0

Поскольку мы не можем сортировать данные в Кассандре, я хотел хранить данные в таком формате, что когда я получаю данные, мне нужно получить данные в 'last in first out format ', т.е. если пользователь вводит комментарии при получении данных, сначала я должен получить самые последние комментарии, а затем более старые комментарии. Я думаю, что это как-то связано с компаратором.Как организовать данные в Кассандре, чтобы получить данные в последнем в первом формате

Я установил следующее при настройке Кассандры:

assume posts comparator as utf8; 
assume posts validator as utf8; 
assume posts keys as utf8; 

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

ответ

0

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

+0

Я хочу использовать термин «временная метка» свободно. Пока естественный порядок ваших столбцов сортируется по времени, техника будет работать нормально. Номер последовательности для этого был бы очень хорош. – phatfingers

+0

но как сказать кассандре сортировать по метке времени я имею в виду на моей машине ее сортировку в алфавитном порядке – sohaan

+0

Одна базовая конструкция - columnfamily [key] [name] = значение, где значение может быть сериализованной записью, например JSON или doc, может быть, строка CSV. Если имя - это только числовой идентификатор, то это должно работать. Вы можете использовать bigint и хранить миллисекунды с эпохи. Столбец не обязательно должен быть строкой, но если вы хотите, чтобы он был, вы могли бы форматировать строку даты как 'yyyyMMddHHmmss.SSS', и это будет сортироваться по алфавиту в порядке времени. – phatfingers

2

Столбцы в строке всегда сортируются, и вы можете перебирать столбцы в строке в обратном порядке. Учитывая эти два фактора, мы могли бы моделировать ситуацию, которую вы описываете, сохраняя комментарии в семействе столбцов под названием «комментарии», где ключ строки - это идентификатор сообщения, а столбцы представляют комментарии к соответствующему сообщению. Столбцы - это timestamts (даты, отформатированные в формате ISO, временные метки UNIX или UUID времени), а значения - тела текста комментария.

Если вы теперь получите столбцы для строки и укажите, что вы хотели их в обратном порядке, вы получите то, что хотите. Как указать обратный порядок зависит от вашего драйвера, но обычно это просто опция для команды, которая извлекает строку или срез столбца.

Другой способ, который является более хакерским, - взять временную метку UNIX для сообщения и вычесть ее из большого целого числа, например 2^31, и использовать это как ключ столбца. Таким образом, столбцы сортируются в обратном порядке по умолчанию. Это некрасиво, и вышеупомянутый метод более изящный.

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

+0

Вместо того, чтобы использовать эпоху - временную метку для отметки времени, чтобы получить обратный порядок, просто используйте обратный компаратор: http://thelastpickle.com/2011/10/03/Reverse-Comparators/. Он также легко работает с TimeUUIDType. –

+0

Еще лучше! Не знал об этом. – Theo