很多人会有这样的疑问,CRUD也算项目?数据量不达到万亿级别也算数据?并发数不达到千万级别也算并发?这是常态了,尤其是在互联网上,100个w基本上是穷光蛋了,市长都是小官了,至于县长就是个毛县长,啥也不是。现在,我就来让你认识认识,项目只有增删改查是什么概念?让你识别识别下自己。
增
怎么增?逐个插入是增、批量插入是增、均匀插入是增、离线插入也是增,那么请问,哪种场景下,适合使用哪种增的方式?哪种增的方式有什么缺点和优点?怎么量化和证明这些缺点和优点?使用什么手段?什么工具来证明和比对这些插入方式的优缺点?
增到哪?不就是增加数据嘛,那么要增加到哪?是增加到MySQL、还是redis、还是es、druid、nebula、Oracle、TiDB、MongoDB、Hive、Impala、Presto、ClickHouse、Zookeeper?你不会就知道只能增加到mysql吧?那如果出现万亿级别的数据呢?出现非关系型数据呢?出现强度聚合类型的数据呢?如果需要动态扩展存储呢?只存储日志数据呢?如果需要多重备份呢?如果需要多集群又要保持强一致性呢?CAP理论知道么?
增的时候有哪些坑?知道解决方案吗?分布式高并发下如何防止重复新增?瞬间超出压力值百倍的新增任务,如何处理?如何保证数据已经新增到数据库了?你新增的数据磁盘坏了怎么办?新增的性能突然下降了怎么办?知道怎么定位吗?知道怎么排查吗?手段是什么?步骤又是什么?
删
删除就是执行一个delete操作?你不会就知道执行一个delete from这种SQL就算是知道删除了吧?如何自动删除、如何过期删除这些知道吗?
首先,删除需要注意一些什么?如果出现数据依赖呢?怎么检测数据依赖?删除之后出现不一致了怎么办?如果删除失误了怎么办?删除之后后悔了怎么办?两个地方都要删除的,如何保证一定会两个地方同时删掉,如果只删除了一个呢,如果这两个地方的网络断了呢,又如何保证两个地方都删除了?瞬间百万千万的数据要删除呢,怎么保证瞬间压力分摊?高并发条件下如何删除?删除的时候需要加锁吗,如果不加锁导致不一致了怎么办,如果加锁又导致整个系统卡住了怎么办?
删除之后就万事大吉了吗?发现删除之后磁盘占用还是很高怎么办?删除操作过多导致磁盘碎片率很高怎么办?你别告诉我这些都是运维或者DBA做的事情。
改
改的复杂主要体现在涉及到多方系统的改,比如转账,必须要一个人扣款一个人加款同时满足,或者同时不执行,这就是要分布式一致性,如何保证所以的系统都改了?使用分布式事务?那如果有一个耗时很长的呢?分布式事务的性能如何保证?一次完整的请求涉及到成百上千个系统,这样的一致性场景还能用事务吗?
双十一的时候成千上万人在一秒内抢购商品,如何保证商品库存的正确修改呢?既要正确无误的修改,又要保证响应速度,怎么做?
如何确认你的修改是正确的,一个系统一天万亿条修改,你就敢保证这些修改都没问题?怎么保证呢?一旦出现不一致性又如何检测出来呢?如何弥补数据呢?
查
查询就很复杂了,几乎是系统里面涵盖最多最广的,虽然影响没有前面的大,但是涉及面广。
你的查询就是一个select?那你一个select要一分钟,别人的1秒,这个时候你怎么办?你的SQL已经优化到了1秒,但是用户还是觉得慢,怎么办?你要从哪里入手?生产环境某个请求就是慢了,没有任何日志信息给你,你本地又无法复现,生产环境还不能停机,你怎么排查?
如果整个系统的查询响应慢了怎么办?你如何知道整个系统就慢了?你有什么手段去监控系统响应?如果系统有成千上万个呢,你又如何检测这上万个系统的响应快慢,而且还要精确到哪个系统、哪个接口、哪个请求、哪个机器IP、在什么时候响应慢了,慢在哪,你能检测出来吗?你如何评判系统慢还是不慢?要你找到系统查询慢的原因,你有手段和方法吗?
用缓存?缓存出现不一致性呢?你怎么确认缓存和你的数据库是一致的?你如何保证这种一致性?缓存大面积失效呢?缓存穿透、缓存雪崩、缓存击穿听过没?分布式缓存怎么做?如何做到分布式缓存一致性?
如果你去查询别人的系统,发现别人的系统很慢呢,怎么办,你又改不了别人的系统,但是别人的系统又拖垮了你。如果别人疯狂查询你的系统,导致你瘫痪,你怎么办?如果一个查询的查询结果上百个M,你如何检测并处理以及以后如何防止?
查询方面的限流降级熔断听过吗?如何落地实现,如何评判在哪个地方执行?知道查询的冷启动吗?知道双十一秒杀的时候有大量查询的爬虫吗,如何规避这些查询,如何挑选有效的查询?或者平时如何识别出爬虫查询,如何摘除?
懂弹性计算吗?如果每天12点一个小时的查询量是其他时间的100倍,怎么办?如何权衡成本和效益?
你懂了没有,增删改查比你想象中的要复杂千倍万倍,不是说你弄个mysql插入几条数据就完事了,每一步都是值得深入研究的,每一步都存在无底洞,需要你有过硬的基础知识,以及相当丰富的项目经验,每一步都是不简单的,能说出后端只是增删改查的,是有多么的无知。