使用RINGCACHE提高CASSANDRA读写效率
来源:互联网 发布:剑三高冷炮哥捏脸数据 编辑:程序博客网 时间:2024/06/07 07:50
为什么要使用RINGCACHE
Cassandra的内部读写流程大概是这样的:
1 Client端先随机找到Cassandra集群中的一台机器,然后将查询请求发送给这台Cassandra机器。
2 接收到查询请求的Cassandra机器会判断需要查询的数据是否在本机中:如果在本机中,直接查询;如果不在本机中,将请求转发给另外一台机器来查询,并等待另外一台机器的查询结果。
3 查询请求的Cassandra机器将最终的结果返回给Client端。
我们可以看到,在上面的这个查询流程中,如果Client端将需要查询的数据发送给了一台不相关的Cassandra机器,那么这个不相关的Cassandra机器就充当了一个代理。
最坏的情况是所有的请求都发送到某一台Cassandra机器,这样就导致这台Cassandra机器就成为了瓶颈。
理想的状态是:Client端将查询的请求直接发送到存储有需要查询数据的Cassandra机器中,这样就省掉了其中一层不必要的代理。
那么我们如果达到这种理想的状态呢?可以考虑使用Cassandra(我使用的版本是0.6.2)中自带的RingCache。
如何使用RINGCACHE
使用RingCache非常简单,我们只需要编写如下代码即可获得负责某一个数据的实际机器:
ringCache =
new
RingCache();
List<InetAddress> endPoints = ringCache.getEndPoint(keyspaceName, key);
在这里,我们只用2行代码就得到了某一个KeySpace下面的key(如果对Cassandra模型感兴趣,可以参考:大话Cassandra数据模型)对于的所有机器地址。这样我们就能直接对这些机器进行读写操作了。
但是这里需要注意一点,上面的代码依赖与Cassandra的配置文件,所以需要在环境变量中指定才能正常工作。
RINGCACHE的工作原理
为什么RingCache能找到我们需要的节点?
我们在执行RingCache rc = new RingCache();的时候,内部会读取配置文件中的seed信息,然后找到一个有效的seed节点,请求token map信息,并将所有的token map信息缓存在本机。
我们在执行List<InetAddress> endPoints = ringCache.getEndPoint(keyspaceName, key);的时候,RingCache会根据之前找到的token map获取相应的AbstractReplicationStrategy,这个AbstractReplicationStrategy能够根据我们指定的keyspaceName, key再定位到我们需要的节点信息。
这也就解释了RingCache的工作原理。
使用RINGCACHE需要注意的地方
既然使用RingCache能让我们快速地找到对应的Cassandra节点,那是不是以后我们所有的查询都可以使用RingCache了呢?
当然不是,RingCache毕竟只是一个缓存,而Cassandra集群内部的信息是时刻变动的,可能有机器离开,也可能有新的机器加入之类的。但是RingCache一旦使用以后,里面的信息就是不变的啦。
所以我们在实际的使用中需要注意这一点,并进行相应的处理才能更好的发挥出RingCache的作用。
- 使用RINGCACHE提高CASSANDRA读写效率
- io流使用缓冲区提高读写效率
- SDK使用 Mapping File 提高文件读写效率
- IO与文件读写---使用Apache commons io包提高读写效率
- 提高UBUNTU使用效率
- 提高eclipse使用效率
- 提高eclipse使用效率
- 提高Eclipse使用效率
- 提高eclipse使用效率
- 怎样提高游戏的文件读写效率
- 怎样提高游戏的文件读写效率
- java多线程(七)提高锁的效率——使用读写锁
- java多线程(七)提高锁的效率——使用读写锁
- 使用identity提高insert效率
- 使用WITH提高查询效率
- 使用WITH提高查询效率
- windows命令:提高使用效率
- 提高SVN的使用效率
- Linux进程管理(第二版) --计划任务
- hdu 4208 - The time of a day
- java输入输出流
- 冒泡排序和优化
- Linux中断(interrupt)子系统之一:中断系统基本原理
- 使用RINGCACHE提高CASSANDRA读写效率
- 【Python Challenge-0】url
- java集合类TreeMap和TreeSet
- uva111
- java服务端客户端交互系列(一)socket连接
- php ci CodeIgniter快速参考图
- 高仿网易酷狗侧滑与QQ新界面侧滑
- eclipse中改变jsp模板的方法
- JQuery EasyUI 最简单的左右布局实现及tab的右键菜单实现