1

Cassandraで次のデータモデルをモデル化しようとしています。

ビジネス-主キー:BusinessId

Has Many Reviews - primary key : ReviewId
   - Review 1
        - Body
        - Rating
   - Review 2
        - Body
        - Rating 
   and so on
Has an Address
  - State
  - City
  - Zip
Has Business Hours
  - Monday Hours
  - Tuesday Hours
  and so on
Has Offers
  - Offer1
  - Offer2
  and so on

1つのクエリを使用してこのすべての情報を抽出できるようにしたい、つまり、これを1つのビジネス行に格納したい。これどうやってするの?基本的に、親ビジネスエンティティと一緒に保存したい子エンティティがたくさんあります。複合キーについて私が理解していることから、複合キーは1つしか持てません(例:businessId:ReviewIdでレビューをモデル化できます)が、これらすべてのエンティティを1つの行に格納して、1つのクエリですべてのビジネスの詳細を効率的に取得するにはどうすればよいですか。

私の2番目の質問は更新に関するものです。これらのエンティティ(レビュー)の1つだけが頻繁に更新されるとします。他のエンティティはほとんど静的なままです。この巨大なビジネス行からレビューを分離することをお勧めしますか、それともビジネス行全体をメモリに保存せずにレビューを更新できますか?

4

1 に答える 1

2

従来のスキーマレスのThriftベースのクエリモデルを使用して、実行しようとしていることを実行できます。データモデルは次のようになります。

Key: ReviewID {
  Review:1:Body = ""
  Review:1:Rating = 1
  Review:2:Body = ""
  Review:2:Rating = 1
  Address:1:City = ""
  Address:1:State = ""
  Address:1:Zip = ""
  Hours:1:Monday = ""
  Hours:1:Tuesday = ""
  Offer:1:[fieldName] = ""
  Offer:2:[fieldName] = ""
}

このためのスキーマはComposite(Utf8Type, IntegerType, Utf8Type)、ReviewIDに一致するキータイプと値に一致する値タイプ(異なるタイプの場合はバイトになる可能性があります)を使用します。

于 2013-02-18T13:27:16.513 に答える