我使用Cassandra作为分块对象存储。
我使用复制因子3。 我用CL_ONE写块,然后,一旦写完成,我用CL_ONE读。
由于块是不可变的,所以我没有读取陈旧数据的风险。
但是,我可能遇到NotFoundException,因为在写一个块之后尝试读取一个块时,所有副本可能还没有块。
我试图解决这个问题:
重试CL_ONE中的读取,直到副本具有块。这可能需要几秒钟,如果不是几分钟
所以现在我尝试用CL_ONE读取一次,然后如果失败,我用CL_ALL重试。由于我只在第一次写入完成后才阅读,所以我应该在所有情况下都得到一个回复,代价是要求所有副本提供块
我的问题是,这是管理Cassandra中不可变块的读/写的最佳方式(在吞吐量方面,而不是可靠性方面)吗?
提前致谢,
安托
答案 0 :(得分:0)
我不确定我是否理解你正在做什么,也不确定你是否以正确的方式使用Cassandra。
如果您的目标是在写入和后续读取之间实现一致性,那么您必须尊重
写CL +读CL> RF
disequation。实现它的最安全的方法是在写入和读取时使用仲裁(当RF = 3时,仲裁次数为2,因此2 + 2> 3) - 可能最快的方法是全部写入并一次读取。