|
注意,在这个column family中,我们现在没有对所有事件按全局时间进行排序,如果我们是通过事件类型来查询数据的话,这将不是问题,如果用例要求按照时间顺序获取所有事件,我们就需要使用multi-get方法一次查询多个event rowkey,然后将数据在Cassandra客户端程序中将数据按照时间顺序合并即可。
如果你不能添加任何信息到rowkey或者的确需要时间周期作为rowkey,另一个选择是将你的row key手工分割为:“ddmmyyhh | 1″, “ddmmyyhh | 2″,… “ddmmyyhh | n”, N值为集群的节点数。一小时内,可以用轮询的方式写入各个节点。当读取数据的时候,你需要使用multi-gets方法获取所有节点的数据并做合并。(假设这里使用RandomPartitioner,因此无法使用rowkey范围查询)
让读多数据与写多数据分离
这么做,你能够充分利用Cassandra的off-heap行缓存特性。(译者注:off-heap是一种脱离java gc的用法,通过api可以直接分配、释放内存)
无论NOSQL与否,保持读写数据分离都是一个不错的实践。
注意:行缓存对于窄行来说很有用,但对宽行却无益,因为它会将整个行数据放到内存中。通过Cassandra-1956 和 Cassandra-2864 未来可能改变这一现象,但是保持读写分离这项实践将仍然适用。
假如你的column family有大量数据(超过可用内存),同时有热行,开启行缓存可能对你有用。 |
|