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

Hologres要定期更新一张线上频繁查询的表,哪一个更好?

Hologres要定期更新一张线上频繁查询的表,INSERT ON CONFLICT 和INSERT OVERWRITE哪一个更好?(更新时对线上服务查询该表的影响最小)

展开
收起
cuicuicuic 2024-02-06 08:43:53 31 0
3 条回答
写回答
取消 提交回答
  • 在Hologres中,如果我们需要定期更新一张线上频繁查询的表,并希望对在线服务查询该表的影响降到最低,那么选择INSERT ON CONFLICT通常优于INSERT OVERWRITE操作。

    • INSERT OVERWRITE会清空目标表的所有数据,然后再插入新的数据,这意味着在overwrite操作期间,表将不可用,查询会受到影响,而且如果有正在进行的事务或者查询将会中断。

    • INSERT ON CONFLICT(也称为UPSERT操作),它会在插入数据时检测到主键冲突时执行更新操作,而不是删除原有数据。因此,对于已存在的记录,它只会更新变化的部分,而对于新记录则会插入。这样可以在保持数据一致性的同时,尽量减少对正在查询该表的服务的影响。

    结论是,在不影响已有数据完整性和业务连续性的前提下,使用INSERT ON CONFLICT可以更好地实现实时增量更新,并降低对线上服务查询的干扰。特别是当更新操作涉及的数据只是表中的一部分时,这种方式更为理想。当然,具体场景还需要结合表结构设计、索引情况以及业务逻辑来综合判断。

    2024-02-20 16:26:28
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    在需要定期更新一张线上频繁查询的表时,考虑到对线上服务查询影响最小化的需求,INSERT ON CONFLICT 通常是更好的选择。具体如下:

    • INSERT ON CONFLICT(也称为UPSERT):当主键或唯一约束冲突时,可以执行更新操作,而对于没有冲突的数据行则执行插入操作。这种方式可以在不中断表的查询服务的前提下,对数据进行增量更新。
    • INSERT OVERWRITE:这个操作将删除目标表中的所有数据,并插入新数据。使用这种方法时,会导致在更新过程中表不可用,因此对线上查询服务的影响较大。

    总的来说,如果目标是尽量减少对线上查询服务的影响,那么应该选择INSERT ON CONFLICT,因为它可以实现对现有数据的原地更新,而不需要删除整个表的数据。这样可以减少锁表的时间,降低对正在使用该表的线上服务的影响。

    2024-02-06 17:28:23
    赞同 展开评论 打赏
  • 如果能用insert on conflict走fixed plan,这样就是性能最快,影响最小。https://help.aliyun.com/zh/hologres/user-guide/accelerate-the-execution-of-sql-statements-by-using-fixed-plans?spm=a2c4g.11186623.0.0.2893a34eIsEZlj#section-jje-75s-m2w ,此回答整理自钉群“实时数仓Hologres交流群”

    2024-02-06 10:23:49
    赞同 展开评论 打赏

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

相关产品

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

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