On 2017-06-20 23:44 (-0700), web master <socketman2...@gmail.com> wrote: 
> I have this table
> 
> CREATE TABLE users_by_username (
>     username text PRIMARY KEY,
>     email text,
>     age int
> )
> 
> I want to run query like the following
> 
> select username from users where username LIKE 'shl%' LIMIT 10;
> 
> 
> Always , I want to find only 10 username (Case insensitive) that start with
> specific characters , How can I do it efficient? I want to read minimum
> partitions and best performance
> 

This type of query may be something you can accomplish with SASI (which another 
user linked to you), but it will never be efficient. That is a relatively poor 
use case for Cassandra. 

If you MUST do it, you could probably do it by ordering your partitions by 
username:

CREATE TABLE usernames_by_prefix (root text, prefix text, username text, 
PRIMARY KEY(root, prefix, username)

Then 

INSERT INTO usernames_by_prefix(root, prefix, username) VALUES("je", "jef", 
"jeff");
INSERT INTO usernames_by_prefix(root, prefix, username) VALUES("je", "jer", 
"jeremy");
INSERT INTO usernames_by_prefix(root, prefix, username) VALUES("br", "bra", 
"brandon");

Then you can query usernames_by_prefix where root="je" and prefix >= "jef" and 
get all of the username starting with "jef" sorted, quickly and efficiently. 

The risk here is that if you have so many usernames that the size of any 
partition (where the patition here is each root, like root="je") grows above 
~100MB, you'll start having pretty bad performance until this flaw of cassandra 
is fixed in 4.0.



---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@cassandra.apache.org
For additional commands, e-mail: user-h...@cassandra.apache.org

Reply via email to