1.Mysql锁几种
锁机制是为了解决数据库的并发控制问题而产生的。可以将锁机制理解为使各种资源在被并发访问时变得有序所设计的一种规则。
按锁级别分类,可分为共享锁、排他锁和意向锁。
按锁粒度分类,可分为行级锁、表级锁和页级锁。
1. 共享锁
享锁的代号是 S,是 Share 的缩写,也可称为读锁。是一种可以查看但无法修改和删除的数据锁。
共享锁的锁粒度是行或者元组(多个行)。一个事务获取了共享锁之后,可以对锁定范围内的数据执行读操作。会阻止其它事务获得相同数据集的排他锁。
2.排他锁
排他锁的代号是 X,是 eXclusive 的缩写,也可称为写锁,是基本的锁类型。
排他锁的粒度与共享锁相同,也是行或者元组。一个事务获取了排他锁之后,可以对锁定范围内的数据执行写操作。允许获得排他锁的事务更新数据,阻止其它事务取得相同数据集的共享锁和排他锁。
3. 意向锁
为了允许行锁和表锁共存,实现多粒度锁机制,InnoDB 还有两种内部使用的意向锁。
意向锁是一种表锁,锁定的粒度是整张表,分为意向共享锁(IS)和意向排他锁(IX)两类。
意向共享锁表示一个事务有意对数据上共享锁或者排他锁。“有意”表示事务想执行操作但还没有真正执行。
2.Mysql存储引擎,InnoDb?
MySQL 提供了多个不同的存储引擎,包括处理事务安全表的引擎和处理非事务安全表的引擎。
MySQL 5.7 支持的存储引擎有 InnoDB、MyISAM、Memory、Merge、Archive、CSV、BLACKHOLE 等。
存储引擎 | 描述 |
---|---|
InnoDB | 具备外键支持功能的事务处理引擎 |
MyISAM | 主要的非事务处理存储引擎 |
MEMORY | 置于内存的表 |
MERGE | 用来管理由多个 MyISAM 表构成的表集合 |
NDB | MySQL 集群专用存储引擎 |
ARCHIVE | 用于数据存档的引擎,数据被插入后就不能在修改了,且不支持索引。 |
CSV | 在存储数据时,会以逗号作为数据项之间的分隔符。 |
BLACKHOLE | 会丢弃写操作,该操作会返回空内容。 |
FEDERATED | 将数据存储在远程数据库中,用来访问远程表的存储引擎。 |
2.1 InnoDB优势
1)支持事务安全
2)灾难恢复性好
3)使用行级锁
行锁定机制也为 InnoDB 在承受高并发压力的环境下增强了不小的竞争力。
4)实现了缓冲处理
5)支持外键
6)适合需要大型数据库的网站
2.2 MyISAM
优点
1)占用空间小
2)访问速度快,对事务完整性没有要求或以 SELECT、INSERT 为主的应用基本上都可以使用这个引擎来创建表
3)可以配合锁,实现操作系统下的复制备份
4)支持全文检索(InnoDB 在 MySQL 5.6 版本以后也支持全文检索)
5)数据紧凑存储,因此可获得更小的索引和更快的全表扫描性能。
缺点
1)不支持事务的完整性和并发性
2)不支持行级锁,使用表级锁,并发性差
3)主机宕机后,MyISAM表易损坏,灾难恢复性不佳
4)数据库崩溃后无法安全恢复
5)只缓存索引,数据的缓存是利用操作系统缓冲区来实现的,可能会引发过多的系统调用,且效率不佳
3.维度表和事实表区分?
事实表:表格里存储了能体现实际数据或详细数值,一般由维度编码和事实数据组成
维度表:表格里存放了具有独立属性和层次结构的数据,一般由维度编码和对应的维度说明(标签)组成
4.指标体系,指标系统
5.原子指标、度量、时间周期的关系
https://www.cnblogs.com/mengxiaohu/p/15589380.html
度量/原子指标:原子指标和度量含义相同,某一业务行为事件下的度量,是业务定义中不可拆分的指标,如注册数。
时间周期:用来明确数据统计的时间范围或是时间点,如最近30天、自然周、截至当日等。
度量=原子指标
原子指标+时间周期+修饰词=派生指标
6.Flink几种状态
7.DorisDB、CK、Hudi,比较,优劣
https://juejin.cn/post/7035905028397203464#heading-19
DR | CK | |
---|---|---|
事务性 | 事务保证数据ACID | 100w以内原子性,DDL无事务保证 |
HDFS/Spark/Flink导入 | 内置支持 | 外部通过HTTP接口导入 |
事务性 | 事务保证数据ACID | 100w以内原子性,DDL无事务保证 |
SQL兼容性 | 较好 | 差 |
宽表与join | 宽表、大小表性能差,大表join性能好 | 宽表、大小表性能优,大表join性能差 |
谓词下推 | 强 | 差 |
8.python中lamdba,1-100求和,lamdba的优势
print(reduce(lambda x, y: x + y, range(1, 101)))
# 1-100奇数、偶数求和
print(sum(list(filter(lambda x: x % 2 != 1, range(1, 101)))))
print(sum(list(filter(lambda x: x % 2 == 1, range(1, 101)))))
Lambda表达式具有以下优势:
(1)对于单行函数,使用 lambda 表达式可以省去定义函数的过程,让代码更加简洁;
(2)对于不需要多次复用的函数,使用 lambda 表达式可以在用完之后立即释放,提高程序执行的性能。