错误的统计信息,导致了优化器选择错误的惨案

一个客户的性能优化案例: 没有修改数据库实例的任何配置参数以及业务代码没有变更的情况下,一条 sql 出现大幅性能下降。我们来看看出问题的sql 以及他的执行计划:mysql> explain -> SELECT count(con.id) ,-> MAX(DAYNAME(con.date)) ,-> now() ,-> pcz.type,->
分类: 企业开发 发布时间: 06-24 19:56 阅读次数: 0

如何实现Word、PDF,TXT文件的全文内容检索?

简单介绍一下需求能支持文件的上传,下载 要能根据关键字,搜索出文件,要求要能搜索到文件里的文字,文件类型要支持word,pdf,txt文件上传,下载比较简单,要能检索到文件里的文字,并且要尽量精确,这种情况下很多东西就需要考虑进去了。这种情况下,我决定使用Elasticsearch来实现。因为准备找工作刷牛客的原因,发现很多面试官都问到了Elasticsearch,再加上那时候我连Elasticsearch是什么东西都不知道,所以就决定尝试一下新东西。 不得不说Elasticsearch版本更
分类: 企业开发 发布时间: 06-24 19:56 阅读次数: 0

干掉 fastjson?国产新一代 fastjson 2

FASTJSON 2.0介绍FASTJSON 2.0是FASTJSON项目的重要升级,目标是为下一个十年提供一个高性能的JSON库,同一套API支持JSON/JSONB两种协议,JSONPath是一等公民,支持全量解析和部分解析,支持Java服务端、客户端Android、大数据场景。 FASJTONS2代码Release fastjson 2.0.1发布 · alibaba/fastjson2 · GitHub JSONB格式文档jsonb_format_cn · alibaba/f..
分类: 企业开发 发布时间: 06-24 19:56 阅读次数: 0

巨坑,常见的 update 语句很容易造成Bug

业务系统中,使用update语句更新数据是再正常不过的场景,我们也经常通过update更新的行数,来做一些业务判断,类似下面的伪代码:(mybatis + mysql 场景)if (xxxMapper.updateByPrimaryKeySelective(entity)>0){ //更新成功,做其它业务处理}但是这里有一个坑,mysql中update影响行数>0是有条件的,假如有一张表:里面只有一条记录(ID=1),我们用update更新一把ID=1的这条记录
分类: 企业开发 发布时间: 06-24 19:56 阅读次数: 0

Redis6通信协议升级至RESP3,一口气看完13种新数据类型

RESP的全程是Redis Serialization Protocol,基于这个实现简单且解析性能优秀的通信协议,Redis的服务端与客户端可以通过底层命令的方式进行数据的通信。随着Redis版本的不断更新以及功能迭代,RESP V2协议开始渐渐无法满足新的需求,为了适配在Redis6.0中出现的一些新功能,在它的基础上发展出了全新的下一代RESP3协议。下面我们先来回顾一下继承自RESP V2的5种数据返回类型,在了解这些类型的局限性后,再来看看RESP3中新的数据返回类型都在什么地方做出了改进
分类: 企业开发 发布时间: 06-24 19:55 阅读次数: 0

MySQL 批量操作,一次插入多少行数据效率最高?

一、前言我们在操作大型数据表或者日志文件的时候经常会需要写入数据到数据库,那么最合适的方案就是数据库的批量插入。只是我们在执行批量操作的时候,一次插入多少数据才合适呢?假如需要插入的数据有百万条,那么一次批量插入多少条的时候,效率会高一些呢?这里博主和大家一起探讨下这个问题,应用环境为批量插入数据到临时表。二、批量插入前准备博主本地原本是循环查出来的数据,然后每1000条插入一次,直至完成插入操作。但是为什么要设置1000条呢,实不相瞒,这是因为项目里的其他批量插入都是一次插1000条。。汗
分类: 企业开发 发布时间: 06-24 19:55 阅读次数: 0

python—多线程之线程之间共享数据(Queue)

一、Queue理解从一个线程向另一个线程发送数据最安全的方式可能就是使用queue库中的队列了。创建一个被多个线程共享的Queue对象,这些线程通过使用put()和get()操作来向队列中添加或者删除元素。Queue对象已经包含了必要的锁,所以你可以通过它在多个线程间多安全地共享数据。二、原理图三、生产者和消费者生产者:生产数据放到队列中消费者:从队列中获取数据生产者和消费者都可以有多个四、代码q=queue.Queue(1000) 创建一个先进先出的队列,1000代表maxS
分类: 企业开发 发布时间: 06-24 19:55 阅读次数: 0

关于“ModuleNotFoundError: No module named ‘flask._compat‘”的解决

在一个在flask项目中,新建一个新的hello.py,其中的hello功能函数我们希望通过命令来运行。from flask_script import Managerfrom Shopping import create_appmanager=Manager(app)@manager.commanddef hello(): print('命令执行成功')if __name__ == '__main__': manager.run()执行命令:python test_c
分类: 企业开发 发布时间: 06-24 19:54 阅读次数: 0

解决Ubuntu与Windows之间无法复制粘贴问题

问题描述:window上复制的内容无法粘贴在Linux上环境window64位Ubuntu18.04解决步骤1、直接在命令行执行以下命令sudo apt-get autoremove open-vm-tools //卸载已有的工具sudo apt-get install open-vm-tools //安装工具open-vm-toolssudo apt-get install open-vm-tools-desktop //安装open-vm-tools-desktop2、重启Ub
分类: 企业开发 发布时间: 06-24 19:54 阅读次数: 0

MySQL—函数的使用

一、函数的使用MySQL中提供了大量函数来简化用户对数据库的操作,比如字符串的处理、日期的运算、数值的运算等等。使用函数可以大大提高SELECT语句操作数据库的能力,同时也给数据的转换和处理提供了方便。 (在sql中使用函数)函数只是对查询结果中的数据进行处理,不会改变数据库中数据表的值。MySQL中的函数主要分为单行函数和多行函数两大类,下面我们将详细讲解这两大类函数。二、单行函数单行函数是指对每一条记录输入值进行计算,并得到相应的计算结果,然后返回给用户,也就是说,每条记录作为一个输入参数,经过
分类: 企业开发 发布时间: 06-24 19:54 阅读次数: 0

关于AttributeError: type object ‘XXX‘ has no attribute ‘XXX‘的问题

关于AttributeError: type object ‘XXXXXX’ has no attribute 'name’的报错的原因,先运行运行一段代码例如:class Person(object): def __init__(self,name): self.name=name def play(self): print('工作')if __name__ == '__main__': p=Person('KB') p.play
分类: 企业开发 发布时间: 06-24 19:54 阅读次数: 0

【DRF】模型序列化器使用(5)

如果我们想要使⽤序列化器对应的是Django的模型类,DRF为我们提供了ModelSerializer模型类序列化器来帮助我们快速创建⼀个Serializer类。ModelSerializer与常规的Serializer相同,但提供了:基于模型类⾃动⽣成⼀系列字段基于模型类⾃动为Serializer⽣成validators,⽐如unique_together 包含默认的create()和update()的实现一、定义了ModelSerializer类1、__all__from rest_fram
分类: 企业开发 发布时间: 06-24 19:54 阅读次数: 0

【DRF】DRF视图父类(6)

两个基类一、APIViewrest_framework.views.APIViewAPIView是REST framework提供的所有视图的基类,继承⾃Django的View⽗类。APIView与View的不同之处在于:1、传⼊到视图⽅法中的是REST framework的Request对象,⽽不是Django的HttpRequest对象;2、视图⽅法可以返回REST framework的Response对象,视图会为响应数据设置(render)符合前端要求的格式;3、任何APIExcept
分类: 企业开发 发布时间: 06-24 19:54 阅读次数: 0

【DRF】请求和响应对象(7)

一、请求对象(Request)REST framework 传⼊视图的request对象不再是Django默认的HttpRequest对象,⽽是REST framework提供的扩展了HttpRequest类的Request类的对象。REST framework 提供了Parser解析器,在接收到请求后会⾃动根据Content-Type指明的请求数据类型(如JSON、表单等)将请求数据进⾏parse解析,解析为类字典对象保存到Request对象中。Request对象的数据是⾃动根据前端发送数据的格式进
分类: 企业开发 发布时间: 06-24 19:54 阅读次数: 0

【DRF】视图集ViewSet和路由(8)

使⽤视图集ViewSet,可以将⼀系列逻辑相关的动作放到⼀个类中:list() 提供⼀组数据retrieve() 提供单个数据create() 创建数据update() 保存数据destory() 删除数据ViewSet视图集类不再实现get()、post()等⽅法,⽽是实现动作 action 如 list() 、create() 等。视图集只在使⽤as_view()⽅法的时候,才会将action动作与具体请求⽅式对应上。如:class NewsChannelViewSet(viewset.
分类: 企业开发 发布时间: 06-24 19:54 阅读次数: 0

Ubuntu20.04扩容教程

1、操作步骤你要保证你Ubuntu系统在你的Windows的那个硬盘分区中,硬盘剩余足够的空间。关闭虚拟机,不是挂起,是将虚拟机完全关闭然后打开VM 虚拟机选项卡-》选择设置2、打开Ubuntu20.04,安装分区管理工具使用命令安装分区管理工具gparted:sudo apt-get install gparted使用命令启动分区管理工具sudo gparted打开的界面如下图所示1.右键点击分区,选择调整大小/移动2.增大分区后,点击调整大小3、把进度条拉满即可4
分类: 企业开发 发布时间: 06-24 19:54 阅读次数: 0

【django后台】浏览器同源策略和CORS跨域(1)

一、浏览器的同源策略同源策略是浏览器的⼀个安全功能,不同源的客户端脚本(js⽂件)在没有明确授权的情况下,不能读写对⽅资源。只有同⼀个源的脚本赋予dom、读写cookie、session、ajax等操作的权限。url由协议、域名、端⼝和路径组成,如果两个url的协议、域名和端⼝相同,则这两个url是同源的。举例来说:http://www.example.com/dir/page.html协议是 http://域名是 www.example.com端⼝是 80(默认端⼝可以省略)同源政策的⽬
分类: 企业开发 发布时间: 06-24 19:54 阅读次数: 0

【django项目后台开发】Token和Session的区别、Token的生成方式(1)

一、什么是JWTJson web token (JWT), 是为了在⽹络应⽤环境间传递声明⽽执⾏的⼀种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适⽤于分布式站点的单点登录(SSO)场景。JWT的声明⼀般被⽤来在身份提供者和服务提供者间传递被认证的⽤户身份信息,以便于从资源服务器获取资源,也可以增加⼀些额外的其它业务逻辑所必须的声明信息,该token也可直接被⽤于认证,也可被加密。二、token的认证和传统的session认证的区别1、传统的session认证
分类: 企业开发 发布时间: 06-24 19:54 阅读次数: 0

【DRF】*GenericAPIView提供的分页、搜索过滤、搜索排序功能(5.25)

一、搜索过滤采用的方式:使用icontains查询类型作为过滤类型tip:双击shift可以搜索想要找的文件1、setting.py文件REST_FRAMEWORK 中指定搜索引擎类:REST_FRAMEWORK = { #指定搜索引擎类 'DEFAULT_FILTER_BACKENDS':['rest_framework.filters.SearchFilter']}特别注意1:全局配置文件中指定搜索引擎类,所有继承GenericAPIView的类视图中的获取列表数据的接口
分类: 企业开发 发布时间: 06-24 19:54 阅读次数: 0

两种方法实现pycharm中代码回滚到指定版本(附带截图展示)

git reflog:查看所有的历史版本git reset --hard 版本号:回退到指定的版本此时代码已经回退到指定的版本了工作中需要商量,我保留的是左边的代码1、首先在我们需要回滚的py文件的空白处右键点击,然后在弹出的选项卡中选择Local History>>Show History,如图所示:2、然后弹出如下图所示的对话框3、代码的回滚只需在左侧栏中右键选中要回滚的版本,然后在弹出的小对话框中选择Revert即可,如下图所示:4、回退成功后的提示5、回退后的代码6、此时
分类: 企业开发 发布时间: 06-24 19:53 阅读次数: 0