cassandra 2.0.2를 사용하고 있다. (1.2부터 지원된 듯 하다.. 정확한 것은 잘 모름..)
cassandra in query가 지원될까 테스트해봤는데, 지원이 된다. primary key로 지정한 column 에 대해서 in query를 사용하면 에러 난다.
cqlsh:userkeyspace> describe table cf21;
CREATE TABLE cf21 (
key text,
number text,
name text,
PRIMARY KEY (key, number)
) WITH COMPACT STORAGE AND
bloom_filter_fp_chance=0.010000 AND
caching='KEYS_ONLY' AND
comment='' AND
dclocal_read_repair_chance=0.000000 AND
gc_grace_seconds=864000 AND
index_interval=128 AND
read_repair_chance=0.100000 AND
replicate_on_write='true' AND
populate_io_cache_on_flush='false' AND
default_time_to_live=0 AND
speculative_retry='NONE' AND
memtable_flush_period_in_ms=0 AND
compaction={'class': 'SizeTieredCompactionStrategy'} AND
compression={'sstable_compression': 'LZ4Compressor'};
아래와 같이 primary key단위로 사용하면 동작된다.
cqlsh:userkeyspace> select * from cf21 where key in ('row1') and number in ('1') ;
key | number | name
------+--------+------
row1 | 1 | Kim
(1 rows)
cqlsh:userkeyspace> select * from cf21 where key in ('row1') ;
key | number | name
------+--------+------
row1 | 1 | Kim
row1 | 2 | Yun
row1 | 3 | Park
그러나 pk 중 두번째 에 대해서 in query를 사용하면 에러가 발생한다.
cqlsh:userkeyspace> select * from cf21 where number in ('1');
Bad Request: Cannot execute this query as it might involve data filtering and thus may have unpredictable performance. If you want to execute this query despite the performance unpredictability, use ALLOW FILTERING
ALLOW FILTERING; 을 query 끝에 붙여주면 된다. 성능 저하가 되는 이유는 cluster 모두에 요청을 하기 때문에 성능에 제약을 걸린다는 얘기라 할 수 있다. 데이터 모델링을 잘 해야 한다.
cqlsh:userkeyspace> select * from cf21 where number in ('1', '2') ALLOW FILTERING;
key | number | name
------+--------+------
row1 | 1 | Kim
row1 | 2 | Yun
row2 | 1 | Choi
(3 rows)
참고로 index만 걸려 있게 하고, in query를 사용하면 에러 난다.
cqlsh:userkeyspace> describe table cf33;
CREATE TABLE cf33 (
key text,
name text,
number text,
PRIMARY KEY (key)
) WITH
bloom_filter_fp_chance=0.010000 AND
caching='KEYS_ONLY' AND
comment='' AND
dclocal_read_repair_chance=0.000000 AND
gc_grace_seconds=864000 AND
index_interval=128 AND
read_repair_chance=0.100000 AND
replicate_on_write='true' AND
populate_io_cache_on_flush='false' AND
default_time_to_live=0 AND
speculative_retry='NONE' AND
memtable_flush_period_in_ms=0 AND
compaction={'class': 'SizeTieredCompactionStrategy'} AND
compression={'sstable_compression': 'LZ4Compressor'};
CREATE INDEX name ON cf33 (name);
cqlsh:userkeyspace> select * from cf33 where name in ('John') ALLOW FILTERING;
Bad Request: No indexed columns present in by-columns clause with Equal operator
cqlsh:userkeyspace> select * from cf33 where key in ('John') ALLOW FILTERING;
(0 rows)
'nosql' 카테고리의 다른 글
facebook 분석툴 (dw엔진) fresto 소스 공개 (0) | 2013.11.08 |
---|---|
[cassandra 2.0] terminal, cqlsh을 이용해서 간단한 정보 얻어오기 (active check) (0) | 2013.11.07 |
cassandra - rapid read protection (0) | 2013.11.05 |
cassandra version upgrade(update) (0) | 2013.11.05 |
cassandra java api 테스트 - API 비교 (0) | 2013.11.04 |