硬件基础
CPU架构
经典的多CPU架构为对称多处理结构(SMP),即在一个计算机上汇集了一组处理器,他们之间对称工作,共享相同的物理内存与总线
SMP架构主要是共享,系统中所有资源都是共享的,那么会导致竞争的时候性能下降。
为了提高可扩展性,现在主流服务器架构一般为NUMA
NUMA——Non-Uniform Memory Access 非一致性存储访问
IO 总线
存储系统的性能瓶颈一般在IO
Intel x48主板是典型的南北桥架构,北桥芯片通过前端总线与CPU相连,内存模块等挂载在北桥上。
北桥与南桥之间通过DMI链接,DMI带宽为1GB/s
网卡,硬盘则挂载在南桥上。
存储层次架构
- 存储系统的性能瓶颈主要在磁盘的随机读写
- 所以设计存储引擎的时候,需要对磁盘的特性做处理,如把随机写操作转化为顺序写,如通过缓存减少磁盘随机读的操作。
- SSD磁盘一般比较昂贵,可以用于做缓存
- 存储系统的性能主要包括两个维度:吞吐量以及访问延时
- 在保证最低成本的同时,尽可能实现高吞吐,例如磁盘和SSD的延时差别很大,但是带宽差别不大。我们可以把热数据存储到SSD中,冷数据存储到磁盘中。
单机存储引擎
- 哈希存储引擎----Bitcask
基于哈希表结构的键值存储系统,属于日志文件系统,即数据是append only的
-
在bitcask中,每个文件有大小限制,当文件增加到相应大小时候,就会产生一个新的文件。老的文件只读不写。任意时刻只有一个文件可以写,叫做active data file
-
数据结构
每一条数据的记录项如上。
那么所有记录以这样的方式存储在磁盘上
但文件这样持续的存下去,肯定是会无限膨胀的,为了解决个问题,和其他日志型存储系统一样Bitcask也有一个定期的合并操作。合并作,即定期将所有older data file中的数据扫描一遍并生成新的data file(没有包括active data file 是因为它还在不停写入),这里的merge其实就是将对同一个key的多个操作以只保留最新一个的原则进行删除。每次合并后,新生成的数据文件就不再有冗余数据了。
- 基于Hash表建索引
如何基于Key快速定位value?
在内存中建立如图上的Hash索引表
hash表对应的这个结构中包括了三个用于定位数据value的信息,分别是文件id号(file_id),value值在文件中的位置(value_pos),value值的大小(value_sz),于是我们通过读取file_id对应文件的value_pos开始的value_sz个字节,就得到了我们需要的value值。
<