hbase-one-column-with-list-of-values与one-column-family-with-list-of-columns的优缺点是什么?

9rygscc1  于 2021-06-04  发布在  Hadoop
关注(0)|答案(2)|浏览(389)

假设我们为用户和朋友建模,而朋友有一种类型。
我们可以在oracle中对其进行如下建模:

User: id, name, sex, age
Friendship: user_id, friend_id, type

在hbase中,我们可以:
(第一个模型来自这里,由hbase常见问题解答推荐)

Table: Users
RowKey = <user_id>
Column Family = Info; Columns = "Name", "Sex", "Age"
Column Family = Friend; Columns = "Friend:<user_id>"=type

(其中“friend:”=类型可以是一个或多个用户标识)

Table: Users
RowKey = <user_id>
Column Family = Info; Columns = "Name", "Sex", "Age", "Friends"

(其中“friends”是json字符串,格式为[{user\u id:,type:},…]
然而,如果一个朋友没有一个类型,第二个模型可以是 [user_id:<user_id>, ...] . 如果朋友没有类型,第一个模特会怎么做?
这两种方法的优点和好处是什么?

up9lanfz

up9lanfz1#

一列包含值列表会破坏规范化规则。如果你不知道这些是什么或者为什么它们很重要,请做一些研究。
我认为这两种模式都不对。一对多关系应该正确建模。两个模式都违反了规范化规则。

pgvzfuti

pgvzfuti2#

这实际上取决于你有多少朋友,以及你的读写访问模式是什么。
在第一种情况下,每列有一个朋友,您可以添加一个朋友,而不必阅读所有其他朋友。但是,您还可以为每个朋友获得一个单独的时间戳值,从而增加每个朋友的总存储需求。
另外,如果在阅读用户时不总是阅读好友,那么第一种情况不需要加载好友。您可以执行单列族扫描并避免所有额外的io。
更多列族的缺点是有更多的memstore,因此区域需要更多的内存。它还意味着更多的非顺序磁盘刷新,因为每个列族都是单独的磁盘刷新。

相关问题