客户端编程时我们可以注意的:
1、批量读
当我们使用scan顺序读的时候,默认是一个RPC请求返回一条数据,我们可以设置一次返回多条缓存在客户端缓存,比如sn.setCaching(1000);
2、批量写
数据在客户端累计到一定量再发次请求,批量写
table.setWriteBufferSize(1 * 1024 * 1024);
table.setAutoFlush(false);
3、使用filter
使用过滤器,在服务器端就做好过滤再返回数据到客户端,减少网络流量
服务端需要注意到的地方:
1、rowkey的设计尽量短小,尽量避免顺序递增
2、指定列族参数,比如大多是scan顺序读,可将block设大些,默认块大小是64K,可以设为128,使用bloomfilter提高随机读性能规避一些hfile的读
3、region热点
开始会不断往一个region写,可以预划分region
如果rowkey不可避免会造成热点,在rowkey加哈希前缀 对region server数量取余,这种情况scan读的时候会比较麻烦,需要客户端计算好各个子范围开启多个线程分别去范围读
4、memstore提高写性能,blockcache提高读性能,看需求调整,调大一方调小一方,一般加起来占60至70%
5、关闭major compact,手工弄
6、频繁split我们可以改为手工split
比如一开始都是只往一个region里写,只有当region到一定数量才可能负载比较均衡(写请求),这里又出现了个问题,假设各个region大小非常均匀,他们有可能在同一时间split,影响效率,我们可以关闭split,手工split某些region
作者:u011750989 发表于2014-8-28 16:32:56
原文链接