It depends on your version of Cassandra.  I would suggest starting with
this, which describes the differences between 2.0 and 2.1
http://www.datastax.com/dev/blog/row-caching-in-cassandra-2-1

In particular:

> In previous releases, this cache has required storing the entire
partition in memory, which meant that if that was larger than the cache
size, you would never be reading it from the cache. Cassandra 2.1 has
introduced extra CQL syntax to specify the number of rows to cache per
partition.

*However* row cache is actually a surprisingly dangerous property for the
health of a cluster.  Practically speaking it's very, very rarely useful.
In particular the OS does a good job of caching disk seeks in the page
cache, and Cassandra relies on this heavily for consistent and reliable
performance.  When you establish a row cache, you're putting a copy of the
data into off-heap Cassandra memory (a huge win over previous on-heap row
caches), but practically speaking this has little to no real advantage over
the OS level cache of the same data.  And it has the downside that it can
hold onto cold data whose memory would be better used for some other
operation.

In Cassandra 2.0, row caches were "Don't use them.  No, seriously!"
(Jonathan Ellis, CTO Datastax at Cassandra Summit '14 keynote).  In 2.1
they're better because of changes mentioned in the article above, but
except for fairly narrow use cases you're usually better off focusing on
something else for performance optimizations first.

Couple this with the strong recommendation that Cassandra 2.1 isn't yet a
good candidate for important production uses (see
https://engineering.eventbrite.com/what-version-of-cassandra-should-i-run/),
you probably should not be concerning yourself with row caches yet.


On Mon, Jan 19, 2015 at 7:05 AM, nitin padalia <padalia.ni...@gmail.com>
wrote:

> e.g.
> CREATE TABLE usertable_cache (
>   user_id uuid,
>   dept_id uuid,
>   location_id text,
>   locationmap_id uuid,
>   PRIMARY KEY ((user_id, dept_id), location_id)
> ) WITH
>   bloom_filter_fp_chance=0.010000 AND
>   caching='{"keys":"ALL", "rows_per_partition":"1000"}' AND
>   comment='' AND
>   dclocal_read_repair_chance=0.100000 AND
>   gc_grace_seconds=864000 AND
>   read_repair_chance=0.000000 AND
>   default_time_to_live=0 AND
>   speculative_retry='99.0PERCENTILE' AND
>   memtable_flush_period_in_ms=0 AND
>   compaction={'class': 'SizeTieredCompactionStrategy'} AND
>   compression={'sstable_compression': 'LZ4Compressor'};
>
>
>
> select * from usertable_cache WHERE user_id =
> 7bf16edf-b552-40f4-94ac-87b2e878d8c2  and dept_id
> =de3ac44f-2078-4321-a47c-de96c615d40d and location_id = 'ABC4:1';
>
>  user_id                              | dept_id
>       | location_id   | locationmap_id
>
> --------------------------------------+--------------------------------------+---------------+--------------------------------------
>  7bf16edf-b552-40f4-94ac-87b2e878d8c2 |
> de3ac44f-2078-4321-a47c-de96c615d40d |        ABC4:1 |
> 32b97639-ea5b-427f-8c27-8a5016e2ad6e
>
> (1 rows)
>
>
> Tracing session: c40f9ba0-9fe2-11e4-9522-35de4dc20d00
>
>  activity
>
>                                                                  |
> timestamp    | source       | source_elapsed
>
> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------+--------------+----------------
>
>
>                                               execute_cql3_query |
> 19:25:02,875 | 10.76.214.80 |              0
>  Parsing select * from usertable_cache WHERE user_id =
> 7bf16edf-b552-40f4-94ac-87b2e878d8c2  and dept_id =
> de3ac44f-2078-4321-a47c-de96c615d40d and location_id = 'ABC4:1 LIMIT
> 10000; | 19:25:02,875 | 10.76.214.80 |             60
>
>
>                                              Preparing statement |
> 19:25:02,875 | 10.76.214.80 |            157
>
>
>       Ignoring row cache as cached value could not satisfy query |
> 19:25:02,879 | 10.76.214.80 |           3668
>
>
> Executing single-partition query on userobjectid_by_extn_uri_10k_cache
> | 19:25:02,879 | 10.76.214.80 |           3690
>
>
>                                     Acquiring sstable references |
> 19:25:02,879 | 10.76.214.80 |           3700
>
>
>                                      Merging memtable tombstones |
> 19:25:02,879 | 10.76.214.80 |           3755
>
>
>                                      Key cache hit for sstable 3 |
> 19:25:02,879 | 10.76.214.80 |           4264
>
>
>                Seeking to partition indexed section in data file |
> 19:25:02,879 | 10.76.214.80 |           4276
>
>                                                               Skipped
> 0/1 non-slice-intersecting sstables, included 0 due to tombstones |
> 19:25:02,879 | 10.76.214.80 |           4324
>
>
>                       Merging data from memtables and 1 sstables |
> 19:25:02,879 | 10.76.214.80 |           4337
>
>
>                               Read 1 live and 0 tombstoned cells |
> 19:25:02,883 | 10.76.214.80 |           7596
>
>
>                                                 Request complete |
> 19:25:02,883 | 10.76.214.80 |           8263
>
>
>
> select * from usertable_cache WHERE user_id =
> 7bf16edf-b552-40f4-94ac-87b2e878d8c2  and dept_id =
> de3ac44f-2078-4321-a47c-de96c615d40d and location_id = 'ABC4:2';
>
>  user_id                              | dept_id
>       | location_id   | locationmap_id
>
> --------------------------------------+--------------------------------------+---------------+--------------------------------------
>  7bf16edf-b552-40f4-94ac-87b2e878d8c2 |
> de3ac44f-2078-4321-a47c-de96c615d40d |        ABC4:2 |
> 1ddf3188-2642-4f8b-948b-78f220987e54
>
> (1 rows)
>
>
> Tracing session: 42bfdbe0-9fe3-11e4-9522-35de4dc20d00
>
>  activity
>
>                                                                      |
> timestamp    | source       | source_elapsed
>
> -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------+--------------+----------------
>
>
>                                                   execute_cql3_query |
> 19:28:35,423 | 10.76.214.80 |              0
>  Parsing select * from usertable_cache WHERE user_id =
> 7bf16edf-b552-40f4-94ac-87b2e878d8c2  and dept_id =
> de3ac44f-2078-4321-a47c-de96c615d40d and location_id = 'ABC4:2' LIMIT
> 10000; | 19:28:35,423 | 10.76.214.80 |             56
>
>
>                                                  Preparing statement |
> 19:28:35,423 | 10.76.214.80 |            147
>
>
>                                                        Row cache hit |
> 19:28:35,425 | 10.76.214.80 |           2530
>
>
>                                   Read 1 live and 0 tombstoned cells |
> 19:28:35,425 | 10.76.214.80 |           2574
>
>
>                                                     Request complete |
> 19:28:35,425 | 10.76.214.80 |           2943
>
>
>
>
>
>
>
>
>
>
>
> On Mon, Jan 19, 2015 at 6:25 PM, nitin padalia <padalia.ni...@gmail.com>
> wrote:
> > My question is specifically for row cache?  As in cassandra 2.1.2 when I
> > populate a Column Family with 1000 rows for a partition and
> > rows_per_partition setting is 1000 for the Column Family then for first
> and
> > last row, it says cache miss.. if I mention specific row key in query?
> If I
> > increase rows_per_partition to 1002 then it is HIT for all.
> >
> > On Jan 19, 2015 2:17 PM, "nitin padalia" <padalia.ni...@gmail.com>
> wrote:
> >>
> >> Hi,
> >>
> >> Does Cassandra fetches complete partition if I include Cluster key in
> >> where clause.
> >>
> >> Or What is the difference in:
> >> 1. Select * from column_family where partition_key = 'somekey' limit 1;
> >> 2. Select * from column_family where partition_key = 'somekey' and
> >> clustering_key = 'some_clustring_key';
> >>
> >>
> >>
> >> Thanks! in advance.
> >> Nitin Padalia
>
>
>
> --
> Nitin Padalia
> 9999256157
>

Reply via email to