赞
踩
资源紧张的情况下如何保证最近写入数据查询 | ||
现状 | 使用云主机,硬件层面不可控,只能从软件和设计角度去考虑了 | |
优化手段 | 优化原理 | 说明 |
将(Long.MAX_VALUE – timestamp)加到rowkey | 如果最近写入HBase表中的数据是最可能被访问的,可以考虑将时间戳作为row key的一部分,由于是字典序排序,所以可以使用Long.MAX_VALUE – timestamp作为row key,这样能保证新写入的数据排在最前面,在读取时可以被快速命中。 | 快速命中,较少IO,查询也就快 |
适当减少memstore的flush | 写数据先写入memstore,超多大小才flush到磁盘,可以把阈值适当调大,使刚写入的热数据在内存里待一会,增大缓存命中率,同时也降低了写磁盘的次数 | 阈值不能太大,否则flush比较慢 hbase.regionserver.global.memstore.upperLimit |
使用堆外内存做二级缓存(blockcache) | 热数据不容易被淘汰,命中率高,有一定的效果 | LRU 不能以单次读写论英雄 云主机没有配ssd,也无法使用二级缓存 |
按天建表+最近时间段常驻内存 (设置将冷数据表关闭blockcache,留更多缓存空间给热数据) | 按时间段建表,比如按天,当天的可以常驻内存,其余的动态设置为不常住内存; | 具体时间段怎么界定有待讨论,不到万不得已不建议时间段搞得很小 |
按天建表+当天适当增大副本 | 副本数越多,数据本地性就越强,查询会变快 | 副本数不能过多,占用大量存储;冷数据可以降副本以缓解整体存储的占用 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。