14个必须掌握的数据库面试题(附答案)
一、为什么使用数据索引能提高效率
数据索引的存储是 有序的
在有序的情况下, 通过索引查询一个数据是无需遍历索引记录的
极端情况下,数据索引的查询效率为二分法查询效率,趋近于log2(N)
二、B+树索引和哈希索引的区别
B+树是一个平衡的多叉树,从根节点到每个叶子节点的高度差值不超过1,而且同层级的 ...
2000 行代码,带你写一个自己的 SQL 数据库
在 C 被当做“高级语言”,雷布斯和小马哥还在写代码的年代,数据库还不是一个成熟的事物。
和很多技术从简单到复杂的发展历程不太一样,数据库首先成熟并被大规模使用的是 RDBMS(关系型数据管理系统),后来才逐渐兴起了实现相对简单,以 Redis 为代表的 KV 型的数据库。
数据库从后端的技术上看是一个算法、数据结 ...
实时监视同步数据库变更,这个框架真是神器
我们数据库中的数据一直在变化,有时候我们希望能监听数据库数据的变化并根据变化做出一些反应,比如更新对应变化数据的缓存、增量同步到其它数据源、对数据进行检测和审计等等。而这种技术就叫变更数据捕获(Change Data Capture)。对于这种技术我们可能知道一个国内比较知名的框架Canal,非常好用!但是Canal有一个局 ...
数据中台与其存储系统
一、什么是数据中台?
最近几年经常有人提到数据中台这个词,怎么理解?不同人可能有不同的看法,数据中台总的来说是一套可持续“让企业的数据用起来”的机制,一种战略选择和组织形式,是依据企业特有的业务模式和组织架构,通过有形的产品和实施方法论支撑,构建一套持续不断把数据变成资产并服务于业务的机制 ...
Redis 作者谈如何处理维护开源项目面对的精神压力
Redis 作者 antirez 近日对在维护开源项目过程中遇到精神压力的情况发表了看法。
起因是开源项目 Docz 作者 Pedro 在 repo 中发表的一篇短文章,他在其中描述了自己在维护开源项目过程中心理状态的变化。
最初为了开发 Docz,他可以提前 3 小时起床,推迟 3 小时睡觉,可以说是全力以赴地创建了这个项目。Docz ...
阿里云李飞飞:什么是云原生数据库
云原生是一种新型技术体系,是云计算未来的发展方向。今天,我来谈谈何为云原生、云原生如何与分布式有机结合,以及云原生技术如何帮助客户迈入数字原生时代。
李飞飞,阿里巴巴集团副总裁,ACM杰出科学家,阿里云数据库产品事业部负责人,达摩院数据库与存储实验室负责人。
一 云原生:从小池塘到江河大海
...
一条慢SQL导致购物车服务无法使用的解决方案
概述
之前处理过一个购物车故障,觉得还挺经典的,在这里跟大家分享一下。这个故障直接导致前端添加购物车、获取用户购物车列表等操作都失败了。购物车是入口,一旦出现问题,影响极其严重。
临时处理
购物车服务所有接口,是有打印响应时间的,发现比平时慢了很多。由于情况已是十万火急了,我只能先重启购物车, ...
从0开始:500行代码实现 LSM 数据库
前言
LSM-Tree 是很多 NoSQL 数据库引擎的底层实现,例如 LevelDB,Hbase 等。本文基于《数据密集型应用系统设计》中对 LSM-Tree 数据库的设计思路,结合代码实现完整地阐述了一个迷你数据库,核心代码 500 行左右,通过理论结合实践来更好地理解数据库的原理。
一、SSTable(排序字符串表)
之前 ...
数据库开发环境一键式交付的设计思考
最近因为一些工作内容的调整,准备完善下开发环境的建设,让原本游离的环境管理更加合理。简单总结了下,数据库开发环境存在一些潜在隐患和瓶颈:
1)目前公司内的数据库开发环境是业务自主建设,没有DBA协助支持,有的部门会购买专门的服务器部署,有的会复用一些IDC的服务器资源,使用方式较碎片化
2)数据库开发 ...
四步搞定异常SQL
影响SQL执行效率的因素主要包括以下几点。
1)统计信息,具体如下
陈旧的统计信息
错误的优化器参数配置
数据库迁移前后优化器的改变
频繁的数据量变化
2)SQL语句编写问题
3)游标共享问题,具体如下
变量窥探
使用常量
4)资源争用问题,具体如下
硬件资源不足
锁或latch等 ...
提高数据库安全性的十一项技术
数据库不应成为危及安全和隐私的“切入口”,以下技术可以帮助降低数据库安全风险并确保合规性。
数据库中含有大量个人信息,甚至包含一些敏感信息,为管理这些数据的公司带来了不少麻烦。现在,复杂的工具和技术使得数据库开发人员可以通过保持信息的私密性来整体提升数据库的安全性。
这些解决方案主要取决于对 ...
Hive SQL语句的正确执行顺序
关于 sql 语句的执行顺序网上有很多资料,但是大多都没进行验证,并且很多都有点小错误,尤其是对于 select 和 group by 执行的先后顺序,有说 select 先执行,有说 group by 先执行,到底它俩谁先执行呢?
今天我们通过 explain 来验证下 sql 的执行顺序。
在验证之前,先说结论,Hive 中 sql 语句的执行顺序如下 ...
三分钟入门 InnoDB 存储引擎中的表锁和行锁
各位对 ”锁“ 这个概念应该都不是很陌生吧,Java 语言中就提供了两种锁:内置的 synchronized 锁和 Lock 接口,使用锁的目的就是管理对共享资源的并发访问,保证数据的完整性和一致性,数据库中的锁也不例外。
“锁" 是数据库系统区别于文件系统的一个关键特性,其对象是事务,用来锁定的是数据库中的对象,如表、 ...
为什么你的数据库需要单元测试
与工作端代码一起创建的数据集定期包含业务基本原理的战略部分。SQL是代码。你应该尽早批准它,而且要彻底批准。
测试金字塔是有助于描述编程测试特征的一种显著表示形式。当您逐步实现更值得注意的段协调时,您将继续从许多确定的、快速的和非接触的测试,转向总体上批准框架的越来越慢的全球测试。这在基本层面上是个 ...
InfluxDB,TimescaleDB和QuestDB三种时序数据库的比较
【51CTO.com快译】在过去的十年间,我们亲历了关系型、非关系型、在线分析处理(OLAP)型、以及在线事务处理(OLTP)型数据库的市场之争,也注意到了诸如:Snowflake、MongoDB、Cockroach Labs、以及Neo4j等新型数据库的产生和发展。而根据DB-Engines的一项针对数据库管理系统调查的统计(如下图所示),时序型数据库(time s ...
书写高质量SQL的建议
1、避免混乱的逻辑
反例:(统计用户数量)
List<User> users = userMapper.selectAll();
return users.size();
正例:
int count = userMapper.countUser("select count(*) from user");
return count;
2、select one 如果已知结果只有一条, 使用limit 1
反例:(查找 ...
从零实现一个时序数据库
时序数据库(TSDB: Time Series Database)大多数时候都是为了满足监控场景的需求,这里先介绍两个概念:
数据点(Point): 时序数据的数据点是一个包含 (Timestamp:int64, Value:float64) 的二元组。
时间线(Series): 不同标签(Label)的组合称为不同的时间线,如
series1: {"__name__": "netspeed", "hos ...
数据分析师的SQL功底该学到什么程度?
常有朋友问,数据分析师的SQL功底该学到什么程度。今天就先谈谈 T-SQL 中的 Window Function.
Window Function 包含了 4 个大类。分别是:
1 - Rank Function
2 - Aggregate Function
3 - Offset Function
4 - Distribution Function.
1 - Rank Function 平常用到最多
1.1 Rank() Over()
...
可维护、可阅读的SQL代码的十个优秀实践
没有正确的指导,它很容易混淆SQL。由于团队中的每个人都可能有自己的写作SQL习惯,因此您可以快速结束一个没有人理解的令人困惑的代码。
您可能意识到遵循一套良好实践的重要性..这篇文章为您提供了您正在寻找的指导!
1. 使用大写的关键字
让我们从一个基本开始:使用大写的SQL关键字,以及小写的表和列。使用S ...
如何使用 SQL 对数据进行分析
前言
我们通过 OLTP(联机事务处理)系统实时处理用户数据,还需要在 OLAP(联机分析处理)系统中对它们进行分析,今天我们来看下如何使用 SQL 分析数据。
使用 SQL 进行数据分析的几种方式
在 DBMS(数据库管理系统) 中,有些数据库很好地集成了 BI 工具,可以方便我们对收集的数据进行商业分析。 比如在SQL Server ...