Я разрабатываю блог, используя cassandra и astyanax. Это только упражнение, конечно.
Я смоделировал семейство столбцов CF_POST_INFO следующим образом:
private static class PostAttribute {
@Component(ordinal = 0)
UUID postId;
@Component(ordinal = 1)
String category;
@Component
String name;
public PostAttribute() {}
private PostAttribute(UUID postId, String category, String name) {
this.postId = postId;
this.category = category;
this.name = name;
}
public static PostAttribute of(UUID postId, String category, String name) {
return new PostAttribute(postId, category, name);
}
}
private static AnnotatedCompositeSerializer<PostAttribute> postSerializer = new AnnotatedCompositeSerializer<>(PostAttribute.class);
private static final ColumnFamily<String, PostAttribute> CF_POST_INFO =
ColumnFamily.newColumnFamily("post_info", StringSerializer.get(), postSerializer);
И запись сохраняется таким образом:
MutationBatch m = keyspace().prepareMutationBatch();
ColumnListMutation<PostAttribute> clm = m.withRow(CF_POST_INFO, "posts")
.putColumn(PostAttribute.of(post.getId(), "author", "id"), post.getAuthor().getId().get())
.putColumn(PostAttribute.of(post.getId(), "author", "name"), post.getAuthor().getName())
.putColumn(PostAttribute.of(post.getId(), "meta", "title"), post.getTitle())
.putColumn(PostAttribute.of(post.getId(), "meta", "pubDate"), post.getPublishingDate().toDate());
for(String tag : post.getTags()) {
clm.putColumn(PostAttribute.of(post.getId(), "tags", tag), (String) null);
}
for(String category : post.getCategories()) {
clm.putColumn(PostAttribute.of(post.getId(), "categories", category), (String)null);
}
идея состоит в том, чтобы иметь какую-то строку, например, ведро за какое-то время (например, одну строку в месяц или год).
Теперь, если я хочу, например, получить последние 5 сообщений, как я могу сделать для этого запрос ярости? Я могу выполнить запрос ярости на основе идентификатора сообщения (UUID), но я не знаю доступных идентификаторов сообщений, не выполняя другой запрос для их получения. Какова лучшая практика Кассандры здесь?
Конечно, любое предложение о модели данных приветствуется, я очень новичок в cassandra.