开发者社区 > 大数据与机器学习 > 实时数仓 Hologres > 正文

我想创建Hologres一个月数据表,怎样设计合适一些?

我想创建Hologres一个月数据表,用来存放接收到的消息:消息id(唯一标识,无业务意义)、消息类、消息归属、发送者、事件时间
请问一下:Distribution Key、Clustering Key 怎样设计合适一些?

展开
收起
真的很搞笑 2023-12-25 08:57:13 51 0
3 条回答
写回答
取消 提交回答
  • 对于你的消息表设计,以下是一些可能的Distribution Key和Clustering Key设计方案:

    • Distribution Key:可以选择消息归属或者其他具有较好分布特性的字段作为distribution key,以优化数据分布和查询性能。
    • Clustering Key:可以选择事件时间作为clustering key,以便于按照时间顺序对数据进行排序和检索。同时,也可以考虑将消息类作为次要的clustering key,以便于快速查找特定类型的消息。
    2023-12-25 17:09:42
    赞同 展开评论 打赏
  • id做primary key,id也做distribution key,id也做clustering key,事件时间做segment key,消息类、消息归属、发送者做bitmap ,此回答整理自钉群“实时数仓Hologres交流群”

    2023-12-25 16:54:50
    赞同 展开评论 打赏
  • 在设计Hologres的表结构时,考虑Distribution Key和Clustering Key的选择主要基于以下原则:

    1. Distribution Key(分发键):
      • 分布键的选择应该尽可能使得数据在各个分片(shard)上分布均匀。
      • 当查询时经常使用某个列作为过滤条件或者join条件时,选择该列作为分布键可以提高查询效率,因为Hologres可以直接定位到包含所需数据的分片。

    在这个场景中,以下列可能适合作为Distribution Key:

    • 消息归属:如果消息归属的种类数量较多且分布相对均匀,将其作为分布键可以使得数据在分片上均匀分布,并且如果经常按照消息归属进行查询或JOIN操作,这将提高查询效率。
    1. Clustering Key(聚簇键):
      • 聚簇键用于控制数据在磁盘上的物理存储顺序,使得相关数据能存储在一起,从而优化扫描和排序操作。
      • 在Hologres中,每个表最多只能有一个聚簇键,并且聚簇键的字段类型不能为float或double。

    在这个场景中,以下列可能适合作为Clustering Key:

    • 事件时间:如果查询通常按照事件时间进行排序或者范围扫描,那么将事件时间设为聚簇键可以优化这些操作。这样,最近的或者特定时间段的消息会在物理上存储在一起,减少读取数据时的IO。

    总结起来,以下是一个可能的表设计:

    CREATE TABLE messages (
        message_id BIGINT PRIMARY KEY,
        message_type VARCHAR,
        message_owner VARCHAR,
        sender VARCHAR,
        event_time TIMESTAMP,
    ) DISTRIBUTED BY (message_owner) CLUSTERED BY (event_time);
    

    这个设计中,message_owner作为Distribution Key,可以优化按照消息归属的查询和JOIN操作;event_time作为Clustering Key,可以优化按照事件时间的排序和范围扫描操作。但是,请注意实际选择应根据你的具体业务需求和数据分布情况进行调整。

    2023-12-25 09:09:09
    赞同 1 展开评论 打赏

本技术圈将为大家分析有关阿里云产品Hologres的最新产品动态、技术解读等,也欢迎大家加入钉钉群--实时数仓Hologres交流群32314975

相关产品

  • 实时数仓 Hologres
  • 相关电子书

    更多
    实时数仓Workshop(广州站)- 李佳林 立即下载
    阿里云实时数仓Hologres技术揭秘2.0 立即下载
    实时数仓Hologres技术实战一本通2.0版(下) 立即下载