我的用例需要大量读取负载 - 有两种可能的模型设计策略:
带行缓存的微小行:在这种情况下,行足够小以适应RAM并且所有列都被缓存。读访问应该很快。
带有密钥缓存的宽行。具有大列数量的宽行对于行缓存来说是大的。访问列子集需要HDD搜索。
据我所知,使用宽行是一种很好的设计模式。但是我们需要禁用行缓存 - 所以....这种宽行的好处是什么(至少对于读取访问)?
哪种方法更好1或2?
答案 0 :(得分:0)
行缓存不一定会提高读取性能。
当行缓存被禁用并且启用了密钥缓存时,Cassandra将直接从HDD中读取数据直接跳转到右偏移(基于密钥缓存)。在这种情况下,操作系统将缓存HDD访问。
Cassandra将文件作为虚拟文件打开 - 在这种情况下,文件被处理为“从内存中读取”实际上第一次读取到HDD并且第二次读取是从RAM提供的。只有已经访问过的文件部分被加载到RAM中(加上预读128kb)
我的负载测试(3个带有8个核心xenon的服务器,24GB内存,Cassandra中的60GB数据)显示,行缓存和文件系统缓存具有相似的性能 - 操作系统缓存会导致CPU负载降低