Я читаю строки из CF, используя Hector с настройками кэша Cassandra по умолчанию. Это означает, что кэш ключей включен. Я использую jconsole для мониторинга попаданий в кэш ключей.
Но даже после чтения одной строки (по первичному ключу) 100 раз число попаданий в кеш не увеличивается. Ряд был недавно обновлен.
Итак, когда кеш ключей включен, что такое поток чтения Cassandra. Это так?
- MemTable в памяти проверяется на наличие строки (может находиться там после недавней вставки/обновления).
- Если он не найден в MemTable, кэш ключа проверяется на наличие ключа.
- Если ключ найден (попадание в кеш), один seek , иначе 2 пытается получить строку.
Но используя cassandra-cli
и cassandra-jdbc
(CQL), я получаю разные результаты. То есть, даже когда я недавно обновлял строку, каждое чтение из строки приводит к попаданию в кэш ключа. Скажем, я прочитал это 100 раз, я получил 100 просмотров.
Почему это несоответствие?
Ну, я как бы понял это сам, но хотел бы, чтобы кто-то подтвердил ..
Похоже, что обновления приводят к выборке столбца для обновления в MemTable. Поэтому, когда я обновил строку с помощью Гектора, я не обновил все столбцы. Просто столбец x
и читал тот же столбец x
для операции чтения. Таким образом, кеш не попал, поскольку он уже находится в MemTable.
Во время запуска CQL я просто запускал select * from cf
, в результате чего был получен и другой столбец y
. Столбец y
не был обновлен, поэтому я предполагаю, что он не был в памяти (MemTable), что привело к попаданию в кеш.