ON DUPLICATE KEY UPDATE 语法的特点:1.MySQL私有语法,非SQL92标准语法。2.MySQL自身通过少数键的查找进行数据排重,并决定INSERT或UPDATE。以下将 ON DUPLICATE KEY UPDATE 和 原子操作SELECT+INSERT or UPDATE 的方案进行对比分析。
一、on duplicatekey update有什么优缺点
ON DUPLICATE KEY UPDATE 语法的特点:
1.MySQL私有语法,非SQL92标准语法。
2.MySQL自身通过少数键的查找进行数据排重,并决定INSERT或UPDATE。
以下将 ON DUPLICATE KEY UPDATE 和 原子操作SELECT+INSERT or UPDATE 的方案进行对比分析:
优点:
1.减少网络连接开销,总体效率上也会略高。(具体高多少需要实验数据支撑)
2.代码上书写简洁、方便。对已有表批量插入新数据时尤其方便。
缺点:
1.迁移数据层产品时造成极大的麻烦,需要付出大量成本去改写代码。如MySQL迁移PostgreSQL。
2.业务逻辑分散在应用逻辑层和数据层,对项目维护留下隐患。
这部分的业务逻辑其实由 应用层使用特殊语法 和 数据层使用少数键 去保证整个逻辑正常运作。如果由于项目维护工作上的疏忽、人员/部门间(多数企业中以上两层分属研发和运维部门)协调失误,就有可能造成业务上重大故障。
个人的一些思考和想法:
1.在工程中是否可以使用ON DUPLICATE KEY UPDATE?
对于大部分业务,生存周期可能5年到8年;而从目前来看,MySQL在开源、关系型数据库的应用场景中地位无可撼动。在综合考虑项目迁移和维护成本后,个人觉得还是可以使用的。但是总体上还是倾向于不使用。
延伸阅读:
二、信息抽取是什么
信息抽取(infromation extraction)信息抽取是一种自动化地从半结构化和无结构数据中抽取实体、关系以及实体属性等结构化信息的技术。关键技术包括:实体抽取、关系抽取和属性抽取。
1、实体抽取,也称为命名实体识别(named entity recognition,NER),是指从文本数据集中自动识别出命名实体。
当前主流技术为面向开放域(open domain)的实体抽取。
2、关系抽取,为了得到语义信息,从相关语料中提取出实体之间的关联关系,通过关系将实体联系起来,才能够形成网状的知识结构。其技术研究已经从早期的“人工构造语法和语义规则”(模式匹配),“统计机器学习”发展到“面向开放域的信息抽取方法”与“面向封闭领域的方法”相结合。
3、属性抽取,目标是从不同信息源中采集特定实体的属性信息,如针对某个公众人物,可以从网络公开信息中得到其昵称、生日、国籍、教育背景等信息。采用数据挖掘的方法直接从文本中挖掘实体属性和属性值之间的关系模式,据此实现对属性名和属性值在文本中的定位。