Hologres要定期更新一张线上频繁查询的表,INSERT ON CONFLICT 和INSERT OVERWRITE哪一个更好?(更新时对线上服务查询该表的影响最小)
在Hologres中,如果我们需要定期更新一张线上频繁查询的表,并希望对在线服务查询该表的影响降到最低,那么选择INSERT ON CONFLICT
通常优于INSERT OVERWRITE
操作。
INSERT OVERWRITE
会清空目标表的所有数据,然后再插入新的数据,这意味着在overwrite操作期间,表将不可用,查询会受到影响,而且如果有正在进行的事务或者查询将会中断。
INSERT ON CONFLICT
(也称为UPSERT操作),它会在插入数据时检测到主键冲突时执行更新操作,而不是删除原有数据。因此,对于已存在的记录,它只会更新变化的部分,而对于新记录则会插入。这样可以在保持数据一致性的同时,尽量减少对正在查询该表的服务的影响。
结论是,在不影响已有数据完整性和业务连续性的前提下,使用INSERT ON CONFLICT
可以更好地实现实时增量更新,并降低对线上服务查询的干扰。特别是当更新操作涉及的数据只是表中的一部分时,这种方式更为理想。当然,具体场景还需要结合表结构设计、索引情况以及业务逻辑来综合判断。
在需要定期更新一张线上频繁查询的表时,考虑到对线上服务查询影响最小化的需求,INSERT ON CONFLICT 通常是更好的选择。具体如下:
总的来说,如果目标是尽量减少对线上查询服务的影响,那么应该选择INSERT ON CONFLICT
,因为它可以实现对现有数据的原地更新,而不需要删除整个表的数据。这样可以减少锁表的时间,降低对正在使用该表的线上服务的影响。
如果能用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交流群”
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
本技术圈将为大家分析有关阿里云产品Hologres的最新产品动态、技术解读等,也欢迎大家加入钉钉群--实时数仓Hologres交流群32314975