我有(id,data)格式的数据,例如(1,“someDataS”)。
但是,我对更新 SSTable 中已有的旧数据后会发生什么感到困惑。
例如,如果我更新 SSTable 中当前的数据项,我希望 Memtable 保存新版本,而旧版本保留在 SSTable 中。但是当我在此更新后执行读取时,它仍然检查 SSTable,即使较新的版本应该位于 Memtable 中。
问题:为什么读操作不直接从存储最新版本的Memtable返回更新的数据?它仍然检查 SSTable 是否有原因?
我使用查询跟踪功能来调试它,它让我相信相关代码位于以下文件中 https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java
更具体的“queryMemtableAndSSTablesInTimestampOrder”方法。在我看来,它总是检查 sstable。
在更广泛的用户案例中 - 仅从 memtable 中不一定可以知道 sstable 中没有您不需要的内容。
示例:
using timestamp
语法编写)usint timestamp
语法)最后 2 个具体意味着没有特定场景允许基于表模式进行微优化,您可以消除前 2 个场景的潜力。