概念:
- 索引: 基于原始数据派生而来的额外数据结构,适当的索引可以加速读取查询,但每个索引都会减慢写速度;
- 哈希索引:把每个键一一映射到数据文件中特定的字节偏移量;
存在问题:
哈希表需全部放入内存,如果有大量的键时(哈希冲突)时处理复杂;
区间查询效率低,后续讨论如何解决这个问题;
- 压缩(合并):意味在日志中丢弃重复的键,并且只保留每个键最近的更新,合并时需要解决的问题:
删除记录:合并字段时,发现删除记录(称为墓碑)则会丢弃这个已删除的键。
崩溃恢复:内存中hash map丢失,原则上需从头到尾读取整个段文件来恢复,但文件过需扫描很长时间,解决方案是每个段的快照存储在磁盘上并加载到内存中。
部分写入的记录:部分损坏丢弃;
压缩:LevelDB 分层压缩,HBase大小分级压缩;
并发控制:写入以严格先后顺序追加到日志中,通常是只有一个写线程:追加效率高原因:
后续比较B-tree 和LSM-tree问题;
- SSTables :(数据结构较复杂)
特点:
数据在 SSTable 中按照主键有序存储,每个 SSTable 由若干个大小相近的数据块组成,每个数据块包含若干行。数据块的大小一般在8~64KB之间,允许用户配置;
每个键在合并的段文件中只出现一次(压缩过程已经确保),可并发读取多个文件;
- LSM-tree
前提:顺序磁盘访问要比随机访问快很多。所以磁盘有如下技术特性:对磁盘来说,能够最大化的发挥磁盘技术特性的使用方式是:一次性的读取或写入固定大小的一块数据,并尽可能的减少随机寻道这个操作的次数
解决的问题: 数据集大于内存时可正常工作;
7.B-trees
最常见的索引类型;
将数据库分成固定大小的块或页(4kb),这种设计接近硬件, 磁盘也是固定大小的块排列;
LSM-tree 比 B-tree写入更快,后者读取更快;
- OLTP OLAP 数据仓库
online transaction processing在线事务处理
online analytic processing 在线分析处理
ETL :extract-transform-load 提取转换加载
10.一些概念
事实表:每一行标识特定时间发生的事件;(宽表—>列存储—>列压缩)
维度表:代表事件的对象,如某刻卖出一件商品这个事件关联id为维度表的各个属性;