nosql - HBase:关于架构设计

标签 nosql schema hbase

我正在阅读/研究 HBase 并尝试创建一个架构。我来自 RDBMS 背景,这是第一次尝试 nosql db。我有一个关于架构设计的简单问题:
假设有三张表 => 相册、照片、评论

  • 专辑 <= 由用户创建
  • photo <= 包含上传到相册的所有照片
  • 评论 <= 包含相册或照片的评论
    应该获取一张照片,其中包含所有评论。
    应该获取一个相册,其中包含所有照片,但不包含评论。

  • 用户由电子邮件标识。我想出的模式:
    用户名
    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:...}
        ...
    }
    
  • 这个设计好看吗?我只想知道应该/必须做的修改以及为什么。
  • photo-row-key 不应该加上相册行键(可能是为了节省空间)?
  • 关于评论的 表,应该像 <album-row-key or photo-row-key>:comment:<timestamp> 一样创建注释行键?按照上述模式,每当用户创建评论时,我都需要阅读评论列,用新评论更新它并用 tha 更新行。听起来好吗?

  • 如果您可以共享一些链接,其中包含/具有更适合 RDBMS 的模式示例,那将非常有帮助:)

    最佳答案

    一种替代方法是将评论、照片和相册放在同一张表中
    也把照片和照片评论放在一个列族,相册评论放在另一个列族

  • 相册行有键 email:album:0:0:timestamp 照片行有键
  • 电子邮件:相册:照片:0:时间戳照片评论行键
  • email:album:photo:comment:timestamp 相册评论行键
  • 电子邮件:专辑:评论:时间戳

  • 然后,您可以根据需要在一次访问中获取数据。例如。:
  • 按前缀扫描一次即可获得包含所有照片和所有照片的相册
    他们的评论
  • 按前缀和最后一个键扫描一次将为您提供
    相册及其所有照片但不包括评论
  • 通过电子邮件扫描:第二列系列的专辑将为您提供专辑及其所有内容
    评论
  • 通过 email:album:photo 前缀扫描一次会给你一张照片
    及其所有评论
  • 通过电子邮件扫描:所有列族的专辑将为您提供所有数据
  • 通过album.max 使用endkey 通过电子邮件扫描:将为您提供用户的所有相册
  • 关于nosql - HBase:关于架构设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15359856/

    相关文章:

    java - 两个具有多个数据源的映射器

    database - Berkeley DB java 版本,Java 中的任何 LGPL 或 BSD 替代品?

    json - Firebase 中的三向关系

    xsd - 供应商特定命名空间不支持的绑定(bind)命名空间异常

    MySQL:需要架构帮助 - 如何处理列表?

    database - sqlite 上的 information_schema.columns

    spring - 如何在spring上设置hbase

    nosql - RavenDB 数据建模

    redis - 比较 1000 万套彼此

    java - 无法使用java创建hbase