Nosql HBase:关于模式设计

Nosql HBase:关于模式设计,nosql,schema,hbase,Nosql,Schema,Hbase,我正在阅读/研究HBase,并试图创建一个模式。我来自RDBMS背景,这是第一次尝试nosql db。我有一个关于模式设计的简单问题: 假设有三个表=>相册、照片和评论 相册另一种选择是将评论、照片和相册放在同一张表中 同时将照片和照片评论放在一个列族中,将相册评论放在另一个列族中 相册行有键电子邮件:相册:0:0:timestamp照片行有键 电子邮件:相册:照片:0:时间戳照片注释行键 电子邮件:相册:照片:注释:时间戳相册注释行键 电子邮件:相册:注释:时间戳 然后,您可以根据需要在

我正在阅读/研究HBase,并试图创建一个模式。我来自RDBMS背景,这是第一次尝试nosql db。我有一个关于模式设计的简单问题:

假设有三个表=>相册、照片和评论


  • 相册另一种选择是将评论、照片和相册放在同一张表中 同时将照片和照片评论放在一个列族中,将相册评论放在另一个列族中

    • 相册行有键电子邮件:相册:0:0:timestamp照片行有键
    • 电子邮件:相册:照片:0:时间戳照片注释行键
    • 电子邮件:相册:照片:注释:时间戳相册注释行键
    • 电子邮件:相册:注释:时间戳
    然后,您可以根据需要在一次访问中获取数据。例如:

    • 按前缀扫描一次可以得到一个包含所有照片和所有内容的相册 他们的评论
    • 按前缀和最后一个键进行一次扫描将显示 包含所有照片但不包含评论的相册
    • 通过电子邮件扫描一次:第二列系列的相册将为您提供该相册及其所有内容 评论
    • 通过电子邮件扫描一次:相册:照片前缀将为您提供一张照片 所有的评论
    • 通过电子邮件扫描一次:包含所有列族的相册将为您提供所有数据
    • 使用endkey by album通过电子邮件扫描。max:将为用户提供所有相册
    • 等等

    谢谢你,阿农。这是有道理的:)。如果我在相册、照片和评论中添加投票/声誉栏,会怎么样?这需要一个新的键,如
    email:album:photo:comment:vote:timestamp
    。提供这么长的键可以吗?为什么多个表的方法在性能上可能比单个表的方法差(或好)?只是好奇…关于投票-这真的取决于你想如何使用它们。直觉上,我会把eh投票作为一个增量()来保存总数。把选票放在另一张桌子上。这就引出了你的第二个问题:)。将内容放入表中与访问模式有关。我在上面建议的单一表格可以让您进行单一扫描并获得所需的所有信息。重新计算投票数-计数将在单个调用中,然后向下钻取可以在另一个表中
    email || info: {password : ..., name : ...}
    
    <email>:album:<timestamp> || info {title:..., cover: photo-row-key}
    
    <album-row-key>:<timestamp> || info {caption:..., exif: ...}
    
    <album-row-key or photo-row-key> || comments {
        comment:<timestamp>: {user: <email>, text:...}
        comment:<timestamp>: {user: <email>, text:...}
        comment:<timestamp>: {user: <email>, text:...}
        ...
    }