5分钟,告诉你Mysql字符串怎么做索引

5分钟,告诉你Mysql字符串怎么做索引

閱讀本文約花費: 4 (分鐘)很多程序员都不喜欢字符串,我也是,字符串处理起来太麻烦了,而且字符串也比较占空间。举个例子,一个字符要占1个字节,但一般常用字符就那么几个(例如我们常要求用户名只能是大小写字母与数字)。另外一个问题,就是数据库查询的时候,用字符串查询太不方便了。今天我们来了解下,数据库中的字符串查询问题。 在PC互联网时代,我们的很多账户都需要绑定电子邮箱,我们偶尔需要使用电子邮箱,也就是字符串来进行数据查询,为了保证查询效率,我们通常要对字符串字段建立索引。 我们都知道,在InnoDB中,通常使用的是B+树索引,如果索引的类型是字符串,那么我们可能会面临这样一个问题,索引的长度会变得特别长,索引的长度过长会让索引的索引占用更多的存储空间,同时也会增加索引的维护成本。通常我们使用字符串索引,只会使用前面若干个字符,假如用户的邮箱的开头是26个字母,并且用户名随机均匀分布的,那么我们即使使用第一个字符做索引,也能减少25/26的扫描量,假如使用前2个字符,就可以减少675/676次扫描。所以,即便我们只用前面的若干个字符,也能大大地减少数据库的扫描,提升查询速度。 但是在现实生活中,用户名往往不是随机分布的,像a开头的用户往往占比较大。有些字符串的字段,往往开头是相似的,例如居民的身份证好,前面几位数通常是省份跟城镇,教育局的学生信息,通常id是入学时间加月份,索引的选…

Read More Read More

未选择的路

未选择的路

閱讀本文約花費: 2 (分鐘)未选择的路 罗伯特·弗罗斯特 黄色的树林里分出两条路 可惜我不能同时去涉足 我在那路口久久伫立 我向着一条路极目望去 直到它消失在丛林深处 但我却选择了另外一条路 它荒草萋萋,十分幽寂 显得更诱人,更美丽 虽然在这条小路上 很少留下旅人的足迹 那天清晨落叶满地 两条路都未经脚印污染 呵,留下一条路等改日再见 但我知道路径延绵无尽头 恐怕我难以再回返 也许多少年后在某个地方, 我将轻声叹息将往事回顾: 一片树林里分出两条路—— 而我选择了人迹更少的一条, 从此决定了我一生的道路。 The Road Not Taken – by Robert Frost Two roads diverged in a yellow wood, And sorry I could not travel both And be one traveler, long I stood And looked down one as far as I could To where it bent in the undergrowth; Then took the other, as just as fair, And having perhaps the better claim, Because it was grassy and wanted wear; T…

Read More Read More

软件架构设计-五视图方法论(2)

软件架构设计-五视图方法论(2)

閱讀本文約花費: 8 (分鐘)1.每个人都可以做成为架构设计师 不懂软件的和刚入行的人们一听到架构设计,都认为是非常的高大上课题,是一个遥不可及的领域,一般人是不能做的。听起来云里雾里的,第一印象除了来自微软,阿里这些NB的公司里面的人其余的都不能做出架构似的,这是一种先入为主的思想,因为大家都在强调架构师的重要性,他的薪资有多么的高,在整个社会对他的认定导致很多人对架构设计望而生畏。放正自己的心态其实架构设计并没有多么的复杂。我们是从编码入行的,在编码实现功能的过程中我们或多或少的设计了属于自己的软件架构了。 为什么说软件架构师需要多少年的工作经验,因为软件架构就是系统的草图,不仅是代 码编写而且包括部署,运行、开发等这些方面进行设计,目的是为了保证软件开发、运行、扩展、性能、安全、伸缩等等质量的一个保证。只要在编码过程中不仅仅要提升编码的质量而且要留心其他方面的知识积累与学习,用不了多久你也能成为一位优秀的架构设计师。 2.什么是架构设计 我们要成为架构设计师我们需要了解什么是架构设计。简单一点,架构设计就是一个系统的草图,描述了构成系统的抽象组件,以及各个组件之间的是如何进行通讯的,这些组件在实现过程中可以被细化为实际的组件比如类或者对象。在面向对象领域中,组件之间的联通通常面向于接口实现的。 在“软件架构简介”中David Garlan 和Mary Shaw 认为软件架构师…

Read More Read More

Kubernetes HPA 详解

Kubernetes HPA 详解

閱讀本文約花費: 32 (分鐘)Kubernetes HPA 详解 在前面的学习中我们使用用一个 kubectl scale 命令可以来实现 Pod 的扩缩容功能,但是这个毕竟是完全手动操作的,要应对线上的各种复杂情况,我们需要能够做到自动化去感知业务,来自动进行扩缩容。为此,Kubernetes 也为我们提供了这样的一个资源对象:HorizontalPodAutoscaling(Pod水平自动伸缩),简称 HPA,HPA 通过监控分析一些控制器控制的所有 Pod 的负载变化情况来确定是否需要调整 Pod 的副本数量,这是 HPA 最基本的原理: 我们可以简单的通过 kubectl autoscale 命令来创建一个 HPA 资源对象, HPAController默认 30s轮询一次(可通过 kube-controller-manager 的 –horizontal-pod-autoscaler-sync-period 参数进行设置),查询指定的资源中的 Pod 资源使用率,并且与创建时设定的值和指标做对比,从而实现自动伸缩的功能。 Metrics Server 在 HPA 的第一个版本中,我们需要 Heapster 提供 CPU 和内存指标,在 HPA v2 过后就需要安装 Metrcis Server 了, MetricsServer 可以通过标准的 Kubernetes A…

Read More Read More

软件架构设计-五视图方法论

软件架构设计-五视图方法论

閱讀本文約花費: 12 (分鐘)在实际工作中,我们经常听到“架构”和“架构师”这样的名词,并不新鲜,但是总让很多刚入门的 ​​​在实际工作中,我们经常听到“架构”和“架构师”这样的名词,并不新鲜,但是总让很多刚入门的人感觉很神秘,甚至是高深莫测。很少有人对“架构”有全面的了解和认识能并说清楚架构是什么,更谈不上掌握了。事实上,也只有极少数人能成为或者被冠以“架构师”这样的title。为此,笔者总结了对架构的一些理解,希望能够补充很多初入门的人在这方面认识上的不足,纠正一些误解。高手和老鸟就直接跳过吧。 架构的分类 对于“架构”来讲,理论上划分了5种架构视图,分别是:逻辑架构、开发架构、运行架构、物理架构、数据架构。根据名字,大家都可能大概能猜到其侧重点和含义。这里先用通俗的文字简单介绍下,便于大家理解,大家可以不必纠结概念和这些理论。 逻辑架构:逻辑架构关注的是功能,包含用户直接可见的功能,还有系统中隐含的功能。或者更加通俗来描述,逻辑架构更偏向我们日常所理解的“分层”,把一个项目分为“表示层、业务逻辑层、数据访问层”这样经典的“三层架构”。 开发架构:开发架构则更关注程序包,不仅仅是我们自己写的程序,还包括应用程序依赖的SDK、第三方类库、中间价等。尤其是像目前主流的Java、.NET等依靠虚拟机的语言和平台,以及主流的基于数据库的应用,都会比较关注。和逻辑架构有紧密的关联。 运…

Read More Read More

关于新冠病毒的小建议

关于新冠病毒的小建议

閱讀本文約花費: 10 (分鐘)转:一线小医生一枚,坐标美东离纽约不远,参与治了十几个旁观了几十个新冠病人,有点小心得小建议,给大家报告如下: 新冠的神药近期内是不可能有的。中国试药比美国宽松得多,试过了无数的药。之前中国呼声最高的是抗爱滋病药 (克立芝) ,但随后中国医生自己做的双盲实验证明了它没用,这结论3月18日发表后克立芝立刻打入冷宫。氯喹的前景更不乐观。很多风湿性关节炎和红斑狼疮病人长期服用氯喹,但并没有报告说这类病人就不容易得新冠或者变成重症。因为氯喹没太大的副作用 (但也是有的),我所在医院给所有住院病人都用上了,但我没有感受到它有减少转成重症的作用。人民的希望双盲实验已经做了很久,如果很有效的话肯定会提前揭盲结束 (早结束可以早卖早赚钱),所以估计也没多大的希望。从流感的经验来看,传统的疫苗效果也不会很大。值得关注的是美国搞的全新型mRNA疫苗,但效果也难以预计。 医院虽然没有神药,但是靠氧气和呼吸机这两样法宝,还是可以挽救一些生命的。轻症去医院的主要目的是吸氧,所以居家隔离恢复,在确认不缺氧的前提下,是安全可行的。确认不缺氧要靠指尖血氧计 (pulse oximeter) ,但很可惜这个神器远不如体温计普及,虽然它在正常价格的时候跟体温计一样便宜 (< $20),也一样好用。因为没有普及 pulse ox,所以美国医生经常只能告诉病人有了呼吸急促 (shor…

Read More Read More

刘韧:编辑的价值

刘韧:编辑的价值

閱讀本文約花費: 7 (分鐘)编者按:本文为DoNews编辑部内训课实录,创作于2011年7月。由传媒见闻谭缘于2020年4月根据录音整理。 记者的价值,就是替读者跑腿,读者不在现场,记者把现场发生的事告诉读者,那么编辑的价值在哪呢? 《诗经》、《易经》和《春秋》,这三部作品都是孔子编辑的,而不是他写的,他说“诗三百,思无邪”,是因为他把有邪的删掉了,把符合儒家价值观的留了下来。孔子是个编辑。 孔子还编了《易经》,《易经》传说是周文王被困山谷时写的。但《易经》最早的编纂是孔子做的,所以易经中很多思想和儒家是一致的。我们今天看到《易经》的解释,其实都来源于孔子。《春秋》是一本编年史,也是孔子编的。 最早的报纸是没有编辑的,只有排版。排版只用把所有的新闻堆在一起就可以了,当时信息特别少,能得到的信息都是重要信息。现在每天能产生数万条新闻,读者注意力极限不超过一百条。这样的比例,就要求必须有编辑,没有编辑,报纸是没法看的。现在是信息过载,而不是稀缺,过载要求必须选择。 上世纪90年代,我在安徽阜阳能把所有能接触到的信息都看一遍。当时的报纸非常少,电视也只有中央台很少的几个频道。进入互联网和卫星时代后,就过渡到了信息过载的阶段。2000年,我第一次装上卫星电视时,我太惊讶了,全世界的电视我都能看到。上世纪90年代初没有编辑其实还无所谓,因为信息很少,特别在中国,几乎没什么信息。我能把《北京…

Read More Read More

Redis跳跃表

Redis跳跃表

閱讀本文約花費: 7 (分鐘)跳跃表(skiplist)是一种随机化的数据, 由 William Pugh 在论文《Skip lists: a probabilistic alternative to balanced trees》中提出, 跳跃表以有序的方式在层次化的链表中保存元素, 效率和平衡树媲美 —— 查找、删除、添加等操作都可以在对数期望时间下完成, 并且比起平衡树来说, 跳跃表的实现要简单直观得多。 以下是个典型的跳跃表例子(图片来自维基百科): 从图中可以看到, 跳跃表主要由以下部分构成: 表头(head):负责维护跳跃表的节点指针。 跳跃表节点:保存着元素值,以及多个层。 层:保存着指向其他元素的指针。高层的指针越过的元素数量大于等于低层的指针,为了提高查找的效率,程序总是从高层先开始访问,然后随着元素值范围的缩小,慢慢降低层次。 表尾:全部由 NULL 组成,表示跳跃表的末尾。 因为跳跃表的定义可以在任何一本算法或数据结构的书中找到, 所以本章不介绍跳跃表的具体实现方式或者具体的算法, 而只介绍跳跃表在 Redis 的应用、核心数据结构和 API 。 跳跃表的实现 为了满足自身的功能需要, Redis 基于 William Pugh 论文中描述的跳跃表进行了以下修改: 允许重复的 score 值:多个不同的 mem…

Read More Read More

写作 博客/公众号 工具分享

写作 博客/公众号 工具分享

閱讀本文約花費: 7 (分鐘)不断打磨下来,形成自己的一套写作工具链,今天整理分享给大家,希望帮助大家的提高写作效率。 写作可以分为三步: 写作前 写作中 写作后 按照这三步介绍这个过程中我用到一些工具。 写作前 trello 官网地址:https://trello.com/ 这是一款任务管理工具,类似于敏捷开发中看板,我们可以快速管理任务。 日常工作我只要想到一个 idea,就会第一时间先记录到 idea 列表中。这里千万不要高估自己的记忆力,如果想到了,感觉记录下来。以前上午灵光一现想到一个 idea,准备晚上写一下,然后晚上就想不起来。。。 前期准备时,可以将收集到的资料,素材,全部放到具体卡片中。 当我们开始写作后,拖动到下一个列表,完成之后,再拖到下一个列表,这样写作任务非常清晰。 trello 十分强大,这里只是用了小功能,感兴趣的同学可以深入研究一下。 写作中 typora+iPic+坚果云 markdown 编辑器:typora,下载地址:https://typora.io/。 图床工具:iPic,下载地址:https://toolinbox.net/iPic/ 云盘:坚果云,下载地址:https://www.jianguoyun.com/ iPic 只支持 macos 在 typora 中使用 markd…

Read More Read More

世界最著名的飞地之一;俄罗斯孤悬海外的加里宁格勒州

世界最著名的飞地之一;俄罗斯孤悬海外的加里宁格勒州

閱讀本文約花費: 3 (分鐘)飞地是一种特殊的人文地理想象,指隶属于某一行政区管辖却不与本区毗连的土地。 飞地这个术语第一次出现于西班牙与法国1526年签订的《马德里条约》的文件上。 从中世纪第一次出现飞地这个术语到如今,出现了很多飞地,但成因相当复杂。 世界上最著名及最重要的飞地之一;俄罗斯在欧洲的飞地加里宁格勒州。 加里宁格勒洲南邻波兰,东北部和东部与立陶宛接壤,与俄罗斯本土不相邻。 加里宁格勒州是俄罗斯打入北约一个楔子,战略位置极其重要,从加里宁格勒到华沙距离为400公里,到柏林、哥本哈根、斯德哥尔摩的的距离均在600公里左右。 (北约东扩图,加里宁格勒州是俄罗斯楔在北约的一枚钉子) (箭头所指为加里宁格勒州) 加里宁格勒州曾经是俄罗斯联邦的军事重镇,其军事设施及密度亦是全欧洲最多最高的。 前苏联波罗的海军区总部曾经设在此地,俄罗斯波罗的海舰队总部也曾设于此。 (俄罗斯五大舰队分布图) (俄罗斯波罗的海舰队勋章) 加里宁格勒州是苏联二战胜利成果之一,如果说加里宁格勒是佩戴在俄罗斯胸口的一枚勋章;那么哥尼斯堡就是深扎在德国人心中无尽的悲伤。 加里宁格勒原名为哥尼斯堡,这个名字从1255年一直叫到1946年7月4日(此日被苏联改命为加里宁格勒), 加里宁格勒是普鲁士王国的发源地,1701年普鲁士首位国王弗雷德里克一世在这儿的大教堂加冕,并将哥尼斯堡定为普鲁士的首都。 二战后,东普…

Read More Read More

Spring源码笔记之Bean加载之准备创建Bean

Spring源码笔记之Bean加载之准备创建Bean

閱讀本文約花費: 16 (分鐘)我们知道从spring容器中获取单例bean时会先从缓存尝试获取,如果缓存中不存在已经加载的单例bean就需要从头开始bean的创建,而bean的创建过程是非常复杂的,本文就开始研究bean加载这部分的源码。 1. bean创建流程分析   在Spring中bean加载的逻辑是在getSingleton的重载方法中实现的: public Object getSingleton(String beanName, ObjectFactory<?> singletonFactory) { Assert.notNull(beanName, “‘beanName’ must not be null”); // 全局变量需要同步 synchronized (this.singletonObjects) { // 首先检查对应的bean是否已经加载过,因为singleton模式就是复用已创建的bean,所以这一步是必须的 Object singletonObject = this.singletonObjects.get(beanName); // 如果为空才可以进行singleton的bean的初始化 if (singletonObject == null) { if (this.singletonsCurrentlyInDestruction) {…

Read More Read More

肖战227事件始末

肖战227事件始末

閱讀本文約花費: 3 (分鐘)  2020年2月24日,中国大陆男星肖战的一些粉丝发现AO3作品库平台收录关于肖战的同人作品“下坠”,认为这部作品影响了肖战的形象,遂向政府部门举报相关平台(AO3、bilibili、百度网盘、LOFTER等),以及直接向中国网监部门举报,后来通过粉丝的大量投诉和举报,导致知名同人网站AO3(Archive of our own)作品库被封,无法从中国访问,这也使得几个圈子的路人开始围攻和抵制肖战所涉及的影视作品,代言等等,被称为肖战227事件。   2月27日,肖战粉丝们的肆意举报,恶言攻击写手和“路人”的做法已然引发众怒,众多同人作者因为惧怕收举报牵连而临时改名,同时,AO3百度贴吧被封禁,几个圈子的路人开始对肖战在各大平台的话题榜进行攻击,而这一行动被同人社群称为“227大团结”。   2月29日晚,中国大陆用户无法访问AO3,意味着AO3正式被屏蔽,怒火进一步蔓延,同人社群的反击开始延伸至肖战的影视作品,大批网民到中国大陆著名社交网站豆瓣对肖战的影视作品如《陈情令》、《庆余年》进行“刷低分”。商务代言方面,OLAY、小鹿茶(瑞幸咖啡)、OPPO、真果粒(蒙牛)、开小灶(统一企业)、百威啤酒、雅诗兰黛、佳洁士、沙宣等品牌皆受到了牵连,在这些产品的新浪微博评论中出现大量抵制肖战的留言。   3月1日,肖战工作室微博发文称:“注意到肖战粉丝的一些争…

Read More Read More

nginx使用手册+基本原理+优缺点

nginx使用手册+基本原理+优缺点

閱讀本文約花費: 4 (分鐘)一、nginx优点 1.反向代理 1、正向代理: 客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。 server不知道client是谁 2、反向代理:客户端请求服务器,中间也是经过一个代理服务器,客户端访问代理服务器就好像访问目标服务器一样。同时代理服务器将请求转发到后端具体服务器。 客户端不知道自己具体访问的服务器是谁 3、总结 https://blog.csdn.net/wnvalentin/article/details/88171847 正向代理是对客户端的代理,由客户端设立,客户端了解代理服务器和目标服务器,但目标服务器不了解真正的客户端是谁;使用正向代理可达到 突破访问限制、提高访问速度、对服务器隐藏客户端IP等目的; 反向代理是对服务器的代理,由服务器设立,客户端不了解真正的服务器是谁,使用反向代理可达到负载均衡、保障服务端安全、对客户端隐藏服务器IP等目的。 2.负载均衡 集群平摊请求压力 负载均衡策略: 轮询 :平均访问(默认方式) 权重 IP hash :每个ip分配一个固定的服务器 URL hash fair 根据响应时间来访问,哪个机器响应快就哪个 server模块的配置: …

Read More Read More

CSRF的几种防御方法的利弊分析

CSRF的几种防御方法的利弊分析

閱讀本文約花費: 5 (分鐘)本文直接从防御方式开始讨论,防御CSRF有4种方法: 使用POST替代GET 检验HTTP Referer 验证码 Token 使用POST替代GET 一些程序员在开发的时候都是用GET、POST通用的函数来接收客户端的数据,这样也是某些接口有CSRF的原因之一,但是将全部接口都改成只允许POST方式访问,就能防范CSRF了吗?答案是:不能。只能说提高了一些成本。 原本是GET方式访问的接口,攻击者只需要构造接口的URL参数让受害者点击即可。现在改成使用POST方式访问,攻击者只需要利用其他站点,在站点上布置一个POST请求,让用户点击。 检验HTTP Referer HTTP Referer真是一个用于安全的字段,除了能防范CSRF,还能防JSONP劫持、盗链、站外提交等安全问题。但是HTTP Referer就一点问题都没有了吗?答案是:否定的,HTTP Referer只能检查点击的链接来源是来自站内还是站外,如果是GET方式的CSRF,那链接本身就是站内的,也就意味着检验HTTP Referer是无效的。 验证码 上面说的两种防御CSRF的方式,都有一定缺陷。但是使用验证码是完全可以做到防止CSRF的,因为验证码是用户在提交表单的时候,必须输入图片验证码,保证了服务器收到的是来自预期的请求。这里我补充一下,验证码功能必须没有缺陷才行,我之前测试过很…

Read More Read More

不同数据一致性模型有哪些应用?

不同数据一致性模型有哪些应用?

閱讀本文約花費: 11 (分鐘) 对于 CAP 来说,放弃强一致性(这里说的一致性是强一致性),追求分区容错性和可用性,这是很多分布式系统设计时的选择。在工程实践中,基于 CAP 定理逐步演化,就提出了 Base 理论。 那么 Base 理论有哪些内容,Base 理论下的一致性模型又有哪些呢? Base 理论 Base 是三个短语的简写,即基本可用(Basically Available)、软状态(Soft State)和最终一致性(Eventually Consistent)。 Base 理论的核心思想是最终一致性,即使无法做到强一致性(Strong Consistency),但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性(Eventual Consistency)。 接下来我们着重对 Base 理论中的三要素进行讲解。 三个要素详解 基本可用 基本可用比较好理解,就是不追求 CAP 中的「任何时候,读写都是成功的」,而是系统能够基本运行,一直提供服务。基本可用强调了分布式系统在出现不可预知故障的时候,允许损失部分可用性,相比正常的系统,可能是响应时间延长,或者是服务被降级。 举个例子,在双十一秒杀活动中,如果抢购人数太多超过了系统的 QPS 峰值,可能会排队或者提示限流,这就是通过合理的手段保护系统的稳定性,保证主要的服务正常,保证基本可用。 软状态 …

Read More Read More

Kubernetes(K8s) 安装(使用kubeadm安装Kubernetes集群)

Kubernetes(K8s) 安装(使用kubeadm安装Kubernetes集群)

閱讀本文約花費: 18 (分鐘)概述:         这篇文章是为了介绍使用kubeadm安装Kubernetes集群(可以用于生产级别)。使用了Centos 7系统。 一、Centos7 配置说明 1.1   Firewalld(防火墙) CentOS Linux 7 默认开起来防火墙服务(firewalld),而Kubernetes的Master与工作Node之间会有大量的网络通信,安全的做法是在防火墙上配置Kbernetes各组件(api-server、kubelet等等)需要相互通信的端口号。在安全的内部网络环境中可以关闭防火墙服务。 关闭防火墙的命令: 1 # firewall-cmd –state #查看防火墙状态 2 # systemctl stop firewalld.service #停止firewall 3 # systemctl disable firewalld.service #禁止firewall开机启动 1.2   SELinux 建议禁用SELinux,让容器可以读取主机文件系统 执行命令: 1 # getenforce #查看selinux状态 2 # setenforce 0 #临时关闭selinux 3 # sed -i ‘s/^ *SELINUX=enforc…

Read More Read More

     
Scroll Up