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

我希望能够使用一个查询来提取所有这些信息,即我想将其存储在一个业务行中。我怎样才能做到这一点?本质上,我有许多子实体要与父业务实体一起存储。根据我对复合键的了解,您只能有一个复合键(例如)businessId:ReviewId 来模拟评论),但是我如何将所有这些实体存储在一行中,以便在一个查询中有效地检索所有业务详细信息。

我的第二个问题是关于更新。假设这些实体(评论)中只有一个经常更新。其他实体大多保持静止。是否建议将评论与这个巨大的业务行分开,或者我可以在不将整个业务行存储在内存中的情况下更新评论?

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 回答