cassandra 및 astyanax를 사용하여 블로그를 개발 중입니다. 물론 운동 일뿐입니다.astandanax 및 복합 열을 사용하여 cassandra에서 원거리 쿼리를 실행하는 방법
나는 이런 식으로 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 개의 게시물을 가져 오려면 어떻게해야할까요? 게시물 ID (UUID)를 기반으로 분노 쿼리를 실행할 수 있지만 가져 오기 위해 다른 쿼리를 수행하지 않고 사용 가능한 게시물 ID를 알지 못합니다. 카산드라 모범 사례는 무엇입니까?
데이터 모델에 대한 모든 제안은 물론 환영합니다. 나는 cassandra에게 매우 초보자입니다.
감사합니다, 그래 내가 찾고 있었던 것입니다. –
문제 없습니다. 기꺼이 봉사하겠다. –