
算法
文章平均质量分 79
Aiky哇
专注于数据库、go、性能优化,对待当下的态度,决定你未来的高度
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
数据库主从延迟导致查询不准确的解决思路
当数据达到一定量的时候,数据库会成为整个系统的瓶颈,一般采取的优化策略为读写分离,数据库通过分主库从库从而实现读写分离(写请求操作主库,读请求操作从库);1、实现固然重要,但更为重要的是思路;2、很多底层的原理与思想是通用的。转载 2022-12-29 21:59:53 · 616 阅读 · 0 评论 -
系统内存管理介绍,内存申请及回收流程
使用伙伴系统进行存储空间的管理过程中,在用户申请空间时,由于大小不同的空闲块处于不同的链表中,所以分配完成的速度会更快,算法相对简单。回收存储空间时,对于空闲块的合并,不是取决于该空闲块的相邻位置的块的状态;而是完全取决于其伙伴块。所以即使其相邻位置的存储块时空闲块,但是由于两者不是伙伴的关系,所以也不会合并。这也就是该系统的缺点之一:由于在合并时只考虑伙伴,所以容易产生存储的碎片。无用单元的收集可以采用以上 3 中算法中任何一种。转载 2022-08-21 00:00:53 · 1036 阅读 · 0 评论 -
B+树及插入和删除操作详解
本节介绍了有关 B+树的查找、插入和删除操作,由于其更多的是用于文件索引系统,所以没有介绍具体地代码实现,只需要了解实现过程即可。转载 2022-08-20 20:14:40 · 3444 阅读 · 2 评论 -
字符串匹配值Sunday算法
而对于SUNDAY算法,我们从头部开始比较,一旦发现不匹配,直接找到主串中位于模式串后面的第一个字符,即下面绿色的“s”。在把模式串和目标串对齐后,如果发现不匹配,那肯定需要移动模式串。各字符串匹配算法之间的差别也来自于这个地方,对于KMP,是建立部分匹配表来计算。因为,无论模式串移动多少步,模式串后的第一个字符都要参与下一次比较,也就是这里的“s”)其核心思想是在匹配过程中,模式串发现不匹配时,算法。现在有意思了,我们发现t被包含于模式串中,并且t出现在模式串倒数第3个。...转载 2022-07-26 14:56:44 · 342 阅读 · 0 评论 -
【学习设计模式5】创建型模式三结义—抽象工厂模式
抽象工厂模式是所有形式的工厂模式中最为抽象和最具一般性的一种形式原创 2022-01-28 16:26:39 · 896 阅读 · 0 评论 -
从底层源码看解析go语言的channel实现
什么时候能用呢,大量并发的时候可以么?这个的锁粒度大不大,直接使用锁会更快么?单channel只能是单读单写么,多个读多个写对性能有影响么?并发肯定是会有协程调度的,那channel卡住了,会不会使协程调度更加频繁?channel带不带缓冲区对会go的gc有影响么?...原创 2022-01-25 11:55:14 · 1501 阅读 · 0 评论 -
go的协程调度关系,何时会调度切换造成性能影响?
先说结论,省着浪费大家时间。在如下操作操作不会阻塞go runtime的线程调度:转载 2022-01-18 10:48:15 · 826 阅读 · 0 评论 -
【学习设计模式2】设计模式指导思想—面向对象设计原则
如果说设计模式是24道佳肴,那么面向对象设计原则,就是制作美食的配方。一个理论,一个实践。原创 2022-01-14 11:49:45 · 427 阅读 · 0 评论 -
Leapfrog Triejoin:最坏情况下的最优连接算法
介绍leapfrog triejoin是商业数据记录系统 LogicBlox® 采用的一种新颖的连接算法,在不同的基准测试中表现出色。leapfrog triejoin论文的写作者认为这个算法,即使在完全连接的最坏情况下也能提供最优解,是NPRR算法(另外一个最坏情况下join优化算法)的竞争对手,并且leapfrog triejoin算法容易学习和实现,结论证明很简单。论文地址:Leapfrog Triejoin: A Worst-case Optimal Join Algorithm – Log原创 2021-09-30 14:38:56 · 989 阅读 · 0 评论 -
go语言二分查找上下边界
查找左边界保证返回的下脚标id,id左侧的值均比查找值小,右侧的值大于或者等于查找值。比如a[0,1,1,3,4,5,5,5,7]查找1,返回1;查找2,返回3;查找5,返回5;查找-1,返回0;查找8,返回9;查找右边界保证返回的下脚标id,id右侧的值均比查找值大,左侧的值小于或者等于查找值。比如a[0,1,1,3,4,5,5,5,7]查找1,返回2;查找2,返回2;查找5,返回7;查找-1,返回-1;查找8,返回8;代码pa...原创 2021-05-13 14:17:30 · 203 阅读 · 0 评论 -
二分查找,左边界,右边界
查找左边界保证返回的下脚标id,id左侧的值均比查找值小,右侧的值大于或者等于查找值。比如a[0,1,1,3,4,5,5,5,7]查找1,返回1;查找2,返回3;查找5,返回5;查找-1,返回0;查找8,返回9;int left_bound(int[] nums, int target) { if (nums.length == 0) return -1; int left = 0; int right = nums.length; // 注意.原创 2021-05-13 12:04:09 · 574 阅读 · 0 评论 -
RBAC(基于角色的访问控制权限的基本模型)
(一)基本概念 1.定义 RBAC(Role-Based Access Control),也就是所谓的**“基于角色的访问控制权限”**。 2.优势 在RBAC中,用户不再直接与权限相连,而是通过“角色”这一属性来间接的被赋予权限,用户通过成为适当的角色来的...转载 2020-11-16 11:59:33 · 1255 阅读 · 0 评论 -
漫画:什么是SnowFlake算法?
————— 第二天 —————方法一:UUIDUUID是通用唯一识别码 (Universally Unique Identifier),在其他语言中也叫GUID,可以生成一个长度32位的全局唯一识别码。String uuid = UUID.randomUUID().toString()结果示例:046b6c7f-0b8a-43b9-b35d-6489e6daee...转载 2020-11-03 16:13:05 · 179 阅读 · 0 评论 -
三种存储类型:块存储、文件存储、对象存储
链接:https://www.zhihu.com/question/21536660/answer/1159036357链接:https://www.cnblogs.com/hukey/p/8323853.htmlhttps://www.cnblogs.com/sylar5/p/11520149.html存储类型先从三种存储类型开始。看了很多文章,感觉都无从下手,因为我还不了解为什么有这么多的存储方式和存储类型,所以先不看这些概念的定义,先了解为什么会有这些概念。为什么会有这么多存储原创 2020-11-02 10:21:27 · 27902 阅读 · 4 评论 -
CockroachDB的raft优化
读了一下CockroachDB的16年的设计翻译,找了一些CockroachDB的raft优化方法1.选举优化,Cockroach使用随机时间,这样通信往返时间短的会更易第一个发起选举,更容易成为leader,减少了组内出现没有leader的时间2.相对于tidb的multi raft来说,多了心跳合并的优化。减少了大量耗费在心跳上的流量,我不太清楚tidb的PD模块是不是也有这个功能。原理是引入了一种Node级别的lease,只要Node级别的lease有效,那么这个Node上的所有的raft .原创 2020-10-19 14:31:45 · 986 阅读 · 0 评论 -
tidb的raft应用和优化
基于 Raft 构建弹性伸缩的存储系统的一些实践在 TiKV 中,我们选择了按 range 的 sharding 策略,每一个 range 分片我们称之为 region,因为我们需要对 scan 的支持,而且存储的数据基本是有关系表结构的,我们希望同一个表的数据尽量的在一起。另外在 TiKV 中每一个 region 采用 Raft 算法在多个物理节点上保证数据的一致性和高可用。从社区的多个 Raft 实现来看,比如 Etcd / LogCabin / Consul 基本都是单一 raft gro原创 2020-10-16 18:22:46 · 1789 阅读 · 0 评论 -
任务调度算法——时间轮算法
从定时任务说起自然界中定时任务无处不在,太阳每天东升西落,候鸟的迁徙,树木的年轮,人们每天按时上班,每个月按时发工资、交房租,四季轮换,潮涨潮落,等等,从某种意义上说,都可以认为是定时任务。大概很少有人想过,这些“定时”是怎样做到的。当然,计算机领域的同学们可能对此比较熟悉,毕竟工作中的定时任务也是无处不在的:每天凌晨更新一波数据库,每天9点发一波邮件,每隔10秒钟抢一次火车票。。。至于怎么实现的?很简单啊,操作系统的crontab,spring框架的quartz,实在不行Java自带的Schedu转载 2020-09-23 17:48:25 · 1750 阅读 · 0 评论