- 积分
- -1
- 下载分
- 分
- 威望
- 点
- 原创币
- 点
- 下载
- 次
- 上传
- 次
- 注册时间
- 2017-10-31
- 精华
|
3#
发表于 2018-5-10 14:15:54
|
只看该作者
来自: LAN 来自 LAN
先说结论,优化可能不明显。
传统数据库都是基于磁盘(HDD)的, index和heapfile都是基于磁盘做优化的,磁盘IOPS比较低,所以以往的优化都是基本将随机读写转为大批量的顺序读写来做高吞吐率的优化。
B+-Tree的叶子节点就是一堆页表(page),对应到磁盘就是heapfile的扇区块,传统数据库用heapfile来做存储,但是数据量太大了,不停的检索效率还是不高怎么办,然后就把这些所有磁盘上的文件用链表连接起来啊,这个就是索引。也就是说,传统数据库的索引和heapfile文件存储基本都是针对磁盘来做的优化。
但是你现在想切换到SSD怎么办,SSD有很高的IOPS,随机读写性能不错,顺序读写略好于HDD的性能,写入很多时候还会带来写入放大的问题,但是你想把以往磁盘优化的包袱都丢了重新设计怎么可能。如果你的存储是SSD,那么我可以粗略的估计一下,高并发的读取可能性能有提升,写入多的则没多少明显区别。如果我针对磁盘数据库做了优化,将大量数据缓存在内存中,索引也建的很合适,那估计你用HDD和SSD也没多大区别。区别就是如果大量缓存不命中的时候,高并发场景下SSD也确实可能略优于HDD。
@vczh提到的内存数据库,现在内存越来越便宜,都可以当外存使用的时候,将数据缓存在内存中带来效率上的提升则要大的多了。这个时候呢,传统数据库的索引其实是针对磁盘heapfile一类的数据结构优化的,所以in-memory database的B+-Tree也慢慢改成了Cache Sensitive B+-Tree一类的数据结构,index也针对内存做了优化,变成hash index或者cache sensitive一类的index。至于传统数据库和现在内存数据库的区别,那又要列很长的一个专题来讲了 |
|