在我的应用程序中,我需要在任何一个大数据模型中保存消息数据。我需要在两者之间做出选择。
我将在下面解释我的用例。
在我的应用程序中,每个用户都会收到电子邮件。如果相同的电子邮件已被回复/转发,我们将形成这组回复/转发的电子邮件作为对话。
我打算在cassandra或Hbase中保存电子邮件的内容,如下所示。
让我们说用户为U1,消息为M1,对话为C1。
以下是平面行模型:
row key -> U1
Column family(Composite key) -> C1#M1 or C1#M2 ... (Conversation-ID#Message-ID) #->Separator
Column value -> Content of M1 or Content of M2 .....
下面是Tall-Narrow行模型
row key -> U1#C1 (User-ID#Conversation-ID) #->Separator
Column family(Composite key) -> M1 or M2 or M3 ...
Column value -> Content of M1 or Content of M2 .....
哪种数据模型适合用例?
通过数据库执行以下类型的查询。 1.获取用户U1的会话的所有邮件的内容-Id C1。 (可能是1到10个邮件或11到20个邮件的范围) 要么 2.获取用户U1的会话ID C2中的特定邮件M3的内容。
邮件内容从10kb到1MB不等。很少会达到10MB。(0.0001%)大部分都在Kbs。
在这个系统中,读取,插入/更新/删除操作将是80:20。 (80%读操作和19%插入操作。最大1%删除或更新内容)删除操作将删除整个会话。更新将更新特定的邮件内容
请提供适合上述要求的解决方案,并提供有用的解释。