学艺不精,玩不转mariadb---order by排序好慢

学艺不精,玩不转mariadb

一、背景

由于开发的项目较多,多个数据库版本又不同。虽然使用docker处理起来很方便,但是考虑到mysql和mariadb都没多大区别,就打算将手头上的使用mysql的数据库都迁移到mariadb上。正所谓“青出于蓝而胜于蓝”,mysql搞收费后,mariadb在不断地发展壮大,仅管用的不多,但是印象中==mariadb==还是不错的。

正好jumpServer用docker一键部署后就内置了mariadb,于是就把手上的项目数据库迁移到mariadb里,迁移过程很顺利。

  • 首先用navicat里先建一个xxx数据库
  • 再Execute sql file,选择对应的备份数据

    也可以用命令time gunzip < xxx_20231023170623.sql.gz | mysql -h 192.168.10.3 -P 33361 -u root xxx -p 来还原。

还原后以为就完事了,可以愉快的玩耍了。怎料故事才刚刚开始,测试查询竟然比原来的mysql还慢一倍(都是在docker容器里跑,都在同一服务器上跑)。

二、分析测试

首先检查了配置文件,两个数据库的配置文件都没啥好看的,都是默认配置。会不会是mariadb版本的问题或者jumpServer自带==降速==光环?于是拉了一个最新的mariadb镜像,直接按默认配置docker run,然后把数据库还原。经测试没任何改善,有点失望。

药品流向数据清洗之医院名称匹配原理

一、前言

不同的商业流向平台导出的药品流向数据格式千差万别,其中医院名称(终端)叫法不统一,使得数据处理起来变得非常麻烦。把千奇百怪的医院名称转换为标准的医疗机构名称,也就是所谓的数据清洗。当然,数据清选还包括产品名称,规格等字段的处理,甚至还包括计量单位转换。如果采用纯人工处理,工作量将会非常巨大。在[琪乐药品流向数据查询管理系统]:https://www.qipanet.com/project/279.html中有提到系统支持数据清洗,那么系统的数据清洗具体是怎么实现的呢?本文将以医院名称为例,做一个简单的处理过程介绍。

image-20231010003038105image-20231010003038105

golang获取最新行政区划(省市区)信息

一、背景

乐琪药品流向数据查询管理系统(三)功能篇中有提到过系统支持自动更新行政区划信息,那怎么将省、市、区县信息按需随便更新呢?当时在网上找了很久,找到了一些公开的资料或者开源的小项目,有的很久没维护,有的是区域信息错漏百出,总之没找到适合我们使用的,靠别人的都不太靠谱。既然找不到,那就自己造个轮子吧!反正自己项目也是需要用到的。

二、原理

在==民政部==官网上(xzqh.mca.gov.cn),可以查询到各省行政区划信息,但是却不提供文件下载,需要一个个手动查询。3202的今天,竟然不给人下载数据,有点理解不了。抽查了几个近年有变更的区域,发现数据还挺准的,毕竟是国家级网站,还是有一定的权威性,比那些阿猫阿狗的付费接口精准多了。

抓包分析了下发现查询接口还是比较简陋的,于是做了个简单的爬虫模块,丢到quartz里做定时任务,就实现了定时更新行政区划信息,整个过程还是比较简单的。

mysql字段值为空时,判断不等于的问题

mySql中,要查询某字段值a不等于xx的记录,正常情况下用a<>'xx'来判断。
==但是,当字段a中存在null的记录时,查询结果将会有问题!==
因为mysql中,不等于是不包含字段值为null的记录,需要再加上 a is null。

比如:

select * from tb where a<>'xx' or a is null;

gva提示权限不足的解决办法

gva(gin-vue-admin)使用的是casbin来做权限控制,对于手工新增的api,非常容易出现权限不足的情况。解决的方法:

  1. 要检查api管理有没对应的api,url及相关请求参数是否有问题。
  2. 要在角色管理中相应的角色---api勾选对应的接口
  3. 实在不行再检查数据库中casbin_rule表是否对应的规则

这里再给个手工创建api的步骤:

  1. 在api包里对应的服务模块写好接口实现,比如: