02 | 数据结构:快速的Redis有哪些慢操作?
04 | AOF日志:宕机了,Redis如何避免数据丢失?
17 | 为什么CPU结构也会影响Redis的性能?
作者回复: 这个方案是可行的,相当于冷热分层存储了,而且Pika和Redis的数据模型兼容,所以数据迁移起来会比较方便直接。
我想到的关键技术问题:1. 数据冷热的区分方法,这有点类似于缓存算法,把经常访问的数据要能够筛选出来;2. 数据的迁移开销,数据迁移时需要避免对Redis前端读写请求的阻塞,开发这个系统时可能要考虑使用额外线程来迁移Redis数据;3. 数据迁移时数据读写正确性的保证,例如数据正在迁移,是否还能正常读写。
作者回复: ECC内存是需要的,Redis数据都在内存中,如果内存出错,会有影响的。
关于Memtable的问题是个好问题。在你说的情况下,Memtable1还在写SSD,Memtable2已经满了,此时相当于有两个Memtable要刷盘,RocksDB会对前端的写进行限速。
RocksDB中有个配置项是max_write_buffer_number,如果需要往盘上刷的memtable大于这个配置项,就会进行写限速了。
作者回复: 分级存储时,数据的冷热度识别是一个主要要考虑的问题。通常可以用缓存算法策略来筛选冷热数据,目前也有些尝试是用机器学习的方法来预测数据冷热度,进而再放到不同的介质中。
作者回复: 如果用机械硬盘,考虑到机械硬盘的毫秒级别延迟,数据访问速度会比较慢,会拖慢前端应用的响应。一般还是建议用SSD更好些。