Jason,

I'm using plenty of secondary indexes with no problem at all.

Looking at your example,as I think you understand, you forgo indexes by
combining two conditions in one query, thinking along the lines of what is
often done in RDBMS. A scan is expected in this case, and there is no
magic to avoid it.

However, if this query is important, you can easily index on two conditions,
using a composite type (look it up), or string concatenation for quick and
easy solution. Which is, you _create an additional column_ which contains a
combination of the two you want to use in a query. Then index on it.
Problem solved.
The composite solution is more elegant but what I describe works in
simple cases.
It works for me.

Maxim


On 4/25/2012 10:45 AM, Jason Tang wrote:
> 1.0.8
>
> 在 2012年4月25日 下午10:38,Philip Shon <philip.s...@gmail.com
> <mailto:philip.s...@gmail.com>>写 道:
>
>     what version of cassandra are you using. I found a big performance
>     hit when querying on the secondary index.
>
>     I came across this bug in versions prior to 1.1
>
>     https://issues.apache.org/jira/browse/CASSANDRA-3545
>
>     Hope that helps.
>
>     2012/4/25 Jason Tang <ares.t...@gmail.com
>     <mailto:ares.t...@gmail.com>>
>
>         And I found, if I only have the search condition "status", it
>         only scan 200 records.
>
>         But if I combine another condition "partition" then it scan
>         all records because "partition" condition match all records.
>
>         But combine with other condition such as "userName", even all
>         "userName" is same in the 1,000,000 records, it only scan 200
>         records.
>
>         So it impacted by scan execution plan, if we have several
>         search conditions, how it works? Do we have the similar
>         execution plan in Cassandra?
>
>
>         在 2012年4月25日 下午9:18,Jason Tang <ares.t...@gmail.com
>         <mailto:ares.t...@gmail.com>>写 道:
>
>             Hi
>
>             We have the such CF, and use secondary index to search for
>             simple data "status", and among 1,000,000 row records, we
>             have 200 records with status we want.
>
>             But when we start to search, the performance is very poor,
>             and check with the command "./bin/nodetool -h localhost -p
>             8199 cfstats" , Cassandra read 1,000,000 records, and
>             "Read Latency" is 0.2 ms, so totally it used 200 seconds.
>
>             It use lots of CPU, and check the stack, all thread in
>             Cassandra is read from socket.
>
>             So I wonder, how to really use index to find the 200
>             records instead of scan all rows. (Supper Column?)
>
>             /ColumnFamily: queue/
>             /Key Validation Class:
>             org.apache.cassandra.db.marshal.BytesType/
>             /Default column value validator:
>             org.apache.cassandra.db.marshal.BytesType/
>             /Columns sorted by: org.apache.cassandra.db.marshal.BytesType/
>             /Row cache size / save period in seconds / keys to save :
>             0.0/0/all/
>             /Row Cache Provider:
>             org.apache.cassandra.cache.ConcurrentLinkedHashCacheProvider/
>             /Key cache size / save period in seconds: 0.0/0/
>             /GC grace seconds: 0/
>             /Compaction min/max thresholds: 4/32/
>             /Read repair chance: 0.0/
>             /Replicate on write: false/
>             /Bloom Filter FP chance: default/
>             /Built indexes: [queue.idxStatus]/
>             /Column Metadata:/
>             /Column Name: status (737461747573)/
>             /Validation Class: org.apache.cassandra.db.marshal.AsciiType/
>             /Index Name: idxStatus/
>             /Index Type: KEYS/
>             /
>             /
>             BRs
>             //Jason
>
>
>
>

Reply via email to