CreateArtTechnology / Blog

  • 背景工作中遇到一个需求,同时调用了两个异步接口,这两个接口在一段时间之后会回调预设的地址,将结果返回,在回调都完成后进行下一步操作。两个接口之间没有依赖关系,有可能同时返回。
    我的设计非常简单:
    状态值按位表示,如右数第一位为1说明在等待异步接口A,第二位为1说明在等待异步接口B。即01表示等待A回调,10等待B,11同时等待A和B,这样在接口回调时只需要在数据库使用位操作即可确认回调已完成,如status = status ^ 2表示B接口回调完成返回的结果是Json结构保存在表中的,这是由于该表上的数据类型太多(3种不同的type共享表中其他列的数据),使用Json区分数据用途。其实当时已经考虑到了回调同时到达的情况,但没想好处理方法,因为我以为这版需求不是我做,于是埋了坑也没管,血的教训初步设计时认为将Json全量读出再将修改后的Json结构全量更新即可,很明显,这存在并发问题,于是犯难了——文本结构不像数字型,局部修改非常困难如果改为串行调用两个接口,实现起来会非常麻烦和啰嗦,这是最后手段
    今天看到数据导出工单里有一条奇怪的SQL语句:
    SELECT json_extract(detail,"$.width") ... FROM ... WHERE ...
    第一眼并没有很在意,但是鬼使神差我又回过头来看了一下这条记录,从语义上看似乎在单独读取Json结构中的数据,但是真的有这种操作吗?还是说这是自定义函数?这会不会是解决我燃眉之急的曙光?带着将信将疑的态度打开Google,没想到就此打开了新世界的大门。
    ......


  • 架构
    MySQL架构图
    MySQL的架构分为三层。
    第一层只负责提供服务,包括链接处理、授权认证、安全等,做一些必要的检查、适配工作,类似Web应用的Controller层。
    第二层包含了大多数MySQL的核心功能,包含查询解析、分析、优化、缓存等,以及一些跨存储引擎的功能,类似Web应用的Service层。
    第三层包含多种存储引擎,每种引擎有自身的特性,但最终提供统一的底层API与上层通信,屏蔽了底层存储引擎的差异,类似Web应用的Dao层。
    ......


  • MySql介绍
     3     2019-05-22 18:58:07

    MySql
    MySql是什么作为最流行的关系型数据库,不用我说明了。
    MySQL原本是一个开放源码的关系数据库管理系统。MySQL在过去由于性能高、成本低、可靠性好,已经成为最流行的开源数据库,因此被广泛地应用在Internet上的中小型网站中。随着MySQL的不断成熟,它也逐渐用于更多大规模网站和应用,比如维基百科、Google和Facebook等网站。非常流行的开源软件组合LAMP中的“M”指的就是MySQL。——维基百科
    为什么用MySql原因有三——开源、可靠、性能好。个人用户或者中小企业的数据库基本用MySql就够了。
    MySql的知名客户
    官方网站https://www.mysql.com/cn/
    ......

    共3张

  • MySql模板创建、批量删除表
     4     2019-04-09 18:37:03

    背景每日需要在MySql中记录一些日志数据,由于数据量较大,单表查询效率肯定受影响,且明确可以按照日期拆分,因此每日建表。同时由于数据量过大,又忘了定期清理,后期发现磁盘空间不足,需要批量删除表。
    模板创建表思路创建一张空表作为模板,之后每天根据这个模板克隆一个新表,后缀为日期。避免定期任务出现重复建表,使用CREATE IF NOT EXISTS。
    语句使用Mybatis注解的形式:
    CREATE TABLE IF NOT EXISTS prefix_${day} LIKE prefix
    # 也可以使用 'CREATE TABLE AS' 克隆表和数据,但是我们这里不需要数据
    # CREATE TABLE prefix_${day} AS SELECT * FROM prefix
    ......