数据库
文章平均质量分 96
stevewongbuaa
这个作者很懒,什么都没留下…
展开
-
SQLite FTS3 和 FTS4 插件
总览FTS3和FTS4是SQLite虚表模块,允许用户在一堆文档中实现全文搜索。用户输入一个短语(term),或者一些列term,然后这个系统找到一些列文档,最佳地匹配了哪些terms。这篇文章介绍了FTS3和FTS4的部署和使用FTS1和FTS2是过时的全文搜索模块。有一些已知的问题。FTS3的部分恭喜到了SQLite的项目中。现在作为SQLite的一部分被开发和维护。1、FTS3和FTS4的介绍FTS3和FTS4扩展模块允许用户创建特殊的表,内置了全文索引(FTS表)全文索引允许用户有效地查询数翻译 2020-08-08 18:53:29 · 1516 阅读 · 0 评论 -
b-k-d树 原理 图文解析
背景前文介绍了 k-d树 和 k-d-b树 今天再来这个b-k-d树已经几乎没啥可以参考的资料了只能硬啃两篇文章了一个是:medium一个是发明者的论文挺好的,人还是要耐着性子读一些难啃的东西开始介绍关键点这个b-k-d树是基于k-d-b树再做的改进,整体的结构是个森林。。(多个k-d-b树)前文介绍,k-d-b树在做静态查询的时候效果特别好,但是动态插入就不好了。为了解决这种问题,作者研究了这种炸天的算法,用一个森林来做。。仔仔细细地看插入算法:在内存中有一个完全二叉树作为bu原创 2020-06-11 18:29:30 · 2979 阅读 · 0 评论 -
k-d-b树 对 k-d树的改进 原理 图文解析
背景上文讲到k-d树下面来看k-d-b树参考这篇文章:介绍类比二叉搜索树,树会太高,对磁盘io不友好k-d树就更高了,树是真的高,那么我们能不能引入b+树的思想来解决这个问题呢?k-d-b树就是这么搞的。首先我们想一下b+树怎么解决这个问题的。b+树,不再是二叉树,而是多叉树。引入了内部节点,内部节点不存储实际数据,只是一些索引节点。每个内部节点由最小值和最大值定义。与k-d树不一样,k-d树每一层级切分的维度是反复横跳的(第一层x轴,第二层y轴,第三层x轴…)继续上图,参考维基百科原创 2020-06-11 18:14:17 · 1047 阅读 · 0 评论 -
k-d树 原理 图文解析
背景看到了Lucene -》 Bkd树 -》 k-d树what the f*ck are all of these?本文就先从k-d树介绍吧参考维基百科首先这是干嘛的?用于多维度搜索的。例如在二维平面搜一个点,在三维空间搜一个点,在多维空间搜一个点。。。。上个图最好理解了假设我们要搜索的平面就是上面这个图的正方形平面。那么我们建立的k-d树就是下面这个图这样。树的每一层级划分一个平面,循环地划分。在上面这个例子里,第一级是按照X维度划分平面,第二级按照Y维度划分平面,第三级又按照X维原创 2020-06-11 15:54:08 · 1492 阅读 · 0 评论 -
SchedulerLock 分布式锁 原理
背景使用@SchedulerLock可以实现比较轻量级的简单的定时任务,也可以实现分布式锁,那具体的原理是啥?一探究竟不熟悉的同学可以先看一下用法:https://www.baeldung.com/shedlock-spring大概就是定义一个数据表注意这里的name是primary key,是不可重复的。利用了primary key的这个特性,实现了锁的抢占。细节下面会介绍然后加注解实现:看源码直接从注解出发,看源码在注解所在的包内发现一个DefaultLockManager一看原创 2020-06-04 18:46:17 · 5907 阅读 · 2 评论 -
mysql text能保存多长的字符串呢?
背景需要做一个字符串的存储(列表的json化字符串),需要大概估算一下,使用text能保存多少个数据列表的每个元素是uuid,长度是36搜寻资料https://dev.mysql.com/doc/refman/8.0/en/storage-requirements.html按照mysql官网的介绍text的最大长度应该是65536Byte对于咱们这个需求,保存的全是ascii字符,一个字符一个字节,所以就按65536的长度算就行。如果是中文的话,应该也是允许存65536个字节;但是我们使用原创 2020-06-03 15:29:56 · 8922 阅读 · 0 评论 -
基于mysql实现分布式锁
维护一个锁表CREATE TABLE `dist_lock`( `id` bigint PRIMARY KEY NOT NULL AUTO_INCREMENT COMMENT '自增主键', `resource_name` varchar(64) NOT NULL DEFAULT '' COMMENT '资源名字', `node_info` varchar(64) NOT NULL DEFAULT ''原创 2020-06-01 14:53:52 · 395 阅读 · 0 评论 -
mybatis uuid主键 auto_increment列 回显id keyGenerator
背景使用tk.mybatis,原来线上用的uuid主键,业务需求新增一个自增的索引列之后,调用insert插入方法,会将传入的对象的id回显;期望的是回显主键uuid,但是实际上回显的是自增id参考作者的文档https://github.com/mybatis-book/book/issues/45单步调试从insert开始一步一步地往里走应该就是这个后置处理的时候会回写id回头看发现是这里产生的generatedkey是可以找到修改的地方了,但是我们没法插手使得他不修改。。.原创 2020-05-28 15:08:49 · 546 阅读 · 0 评论 -
redis set 占多少内存? bitmap呢?
背景判断一个id是否存在,是用redis set好还是用redis bitmap好呢?(id的个数只有100个的情况下)一些理论知识1、在元素比较少的时候,set是不会用hash的结构的,而是使用ziplist的方式存储,判断元素是否存在需要遍历;2、小的数字(<=9999)是不需要额外的存储空间的,会整个redis共享这些数字;实践redis set每次往set添加一个<=9999的数字,占用的内存增加:2Byte可以算到,添加到100个id,60+100*2=260bi原创 2020-05-26 21:48:35 · 4355 阅读 · 0 评论 -
Mysql MVCC 原理 low_limit_id ReadView
参考:感觉好多地方写的都不对。。还是看源码吧 http://www.iskm.org/mysql56/read0read_8cc_source.html https://www.cnblogs.com/songwenjie/p/8644646.html MVCC Multi-version Concurrency Control 怎么个MultiVersion法? 每个开启的事务...原创 2020-04-29 22:46:03 · 2795 阅读 · 6 评论 -
mysql 自增id主键 和 随机字符串主键 插入性能比较
理论上,自增id作为主键的数据,由于不需要频繁的节点分裂(页分裂),其性能要比随机字符串作为主键性能要好。下面通过实验看一下对比自增id的数据表:CREATE TABLE IF NOT EXISTS `auto_inc_pk`( `id` BIGINT UNSIGNED AUTO_INCREMENT, `name` VARCHAR(100) NOT NULL, PRIMARY...原创 2020-04-14 22:34:15 · 4704 阅读 · 3 评论 -
MySQL数据库 设计用户表
需求做一个展示用户信息的页面,有一个users表,里面该有的信息都有。性能要求数据量30亿。页面必选条件:性别(男/女), 昵称前缀, 年龄。查询条件一定会带上这三个条件。每页展现10条记录。大翻页需求,如查第80w页。尽可能的高性能按注册时间倒序展现设计思路没有标准答案,可以考虑各种方案,大家一起来讨论好的解决方案~分表方式怎么分表呢?用出生时间分表每1年建一个表...原创 2019-11-08 12:40:49 · 20801 阅读 · 0 评论 -
数据库的四种隔离级别
目录数据库的四种隔离级别前言简介实验0准备工作1读取未提交2读取已提交3可重复读4串行化没想到最后一个级别出了乱子没按剧本来学海无涯数据库的四种隔离级别前言首先要推荐这个数据库的文章,感觉写的真好: 如果有人问你数据库的原理,叫他看这篇文章简介引用原文中关于数据库四种隔离级别的介绍。 现代数据库不会使用纯粹的隔离作为默认模式,因为它会带来巨大的性能消耗。SQL一般定义4个隔离原创 2016-07-08 21:56:00 · 15820 阅读 · 2 评论 -
多种方式登陆模块设计
-# 多种方式登陆模块设计目录目录参考了一些资料总结一下1 使用 用户名邮箱手机号 密码 登陆2 第三方登陆mob文档中还有以下描述思考参考了一些资料知乎 第三方一键登录如何保证产品的唯一ID? 开源中国社区 使用第三方登录,怎么设计自己的用户表segmentfault 带第三方登录的用户表如何设计德问 当一个系统可以同时使用用户名/邮箱/手机号注册时,数据库应如何设计m转载 2016-07-08 10:54:04 · 12549 阅读 · 1 评论 -
短url 原理与实现
问题描述微博的长url可以转为短url,这个是怎么实现的呢?要求通过短url也可以查到原来的长url,怎么实现?当规模变大的时候,怎么保证性能?参考关于短网址算法的问题短链接、短网址使用的是什么算法?GitHub:dylang/shortid腾讯微博长url变成短url的算法是怎样的使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)总结数据库查询使用数据库来存储短UR原创 2016-08-04 17:01:01 · 1416 阅读 · 0 评论 -
数据库的锁
隔离机制,加锁机制参考相当好的文章!希望以后结合实践再好好理解。 Innodb中的事务隔离级别和锁的关系http://blog.jobbole.com/100349/?from=timeline&isappinstalled=0[MySQL FAQ]系列 — 如何查看当前最新事务IDMySQL 对于千万级的大表要怎么优化?引文锁有悲观锁和乐观锁。悲观锁悲观锁中分共享锁和排他锁。在事务中,读数据的时转载 2016-08-03 17:10:57 · 255 阅读 · 0 评论 -
[todo]后台开发面试 网络编程 数据库
参考文章腾讯后台开发面试总结,原创,吐血推荐!!引文及相关资料网络编程:tcp与udp的区别(必问)udp调用connect有什么作用?tcp连接中时序图,状态图,必须非常非常熟练socket服务端的实现,select和epoll的区别(必问)epoll哪些触发模式,有啥区别?(必须非常详尽的解释水平触发和边缘触发的区别,以及边缘触发在编程中要做哪些更多的确认)大规模连接上来,并发模型怎么设计tcp转载 2016-08-08 15:24:50 · 849 阅读 · 0 评论 -
Hadoop中两表JOIN的处理方法
参考Hadoop中两表JOIN的处理方法小结1,reduce side join在reduce阶段join。map阶段标记数据来自哪个文件,比如来自file1标记tag=1,来自file2标记tag=2。reduce阶段把key相同的file1的数据和file2的数据通过笛卡尔乘积join在一起。个人理解:举个例子 file1 有{1:'a', 2:'b', 3:'c'} file2 有{1:'原创 2016-08-12 15:33:24 · 2972 阅读 · 0 评论 -
sql join 算法 时间复杂度
参考stackoverflow笔记sql语句如下:SELECT T1.name, T2.dateFROM T1, T2WHERE T1.id=T2.id AND T1.color='red' AND T2.type='CAR'假设T1有m行,T2有n行,那么,普通情况下,应该要遍历T1的每一行的id(m),然后在遍历T2(n)中找出T2.id = T1翻译 2016-08-26 12:04:34 · 8271 阅读 · 0 评论 -
InnDB MVCC
Multiple Version Concurrency Control多版本并发控制英文原文:https://dev.mysql.com/doc/refman/8.0/en/innodb-multi-versioning.htmlInnoDB是怎么做的undo logs 分为 插入/更新 的 undo logs;插入 undo logs 只在事务回滚的时候需要,所以一旦提交,就丢弃了...翻译 2019-06-28 11:14:33 · 222 阅读 · 0 评论 -
关系范式
参考可以先看个视频感受 数据库设计那些事儿数据库设计那些事儿知乎 解释一下关系数据库的第一第二第三范式?个人总结 范式。知乎大神的通俗化定义:一张数据表的表结构所符合的某种设计标准的级别。最低级是第一范式,再往高级走是第二、第三、BCNF、第四、第五范式。 数据库那些事儿: 设计符合范式的数据库有以下好处: 1.减少数据冗余。 2.消除异常(插入异常、更新原创 2016-07-09 10:50:34 · 1217 阅读 · 0 评论