在C#中查询Cassandra
本文关键字:Cassandra 查询 | 更新日期: 2023-09-27 18:25:01
我在时间序列密钥空间中有下表:
CREATE TABLE underlying_data (
symbol text,
ask decimal,
bid decimal,
ts bigint,
PRIMARY KEY ((symbol))
) WITH
bloom_filter_fp_chance=0.010000 AND
caching='KEYS_ONLY' AND
comment='' AND
dclocal_read_repair_chance=0.100000 AND
gc_grace_seconds=864000 AND
index_interval=128 AND
read_repair_chance=0.000000 AND
replicate_on_write='true' AND
populate_io_cache_on_flush='false' 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'};
CREATE INDEX underlying_data_ts_idx ON underlying_data (ts);
cqlsh:timeseries>
在插入以下项目后,我尝试从C#查询此表:
static long ninetySeventyTicks = new DateTime(1970, 1, 1).Ticks;
Cluster cluster = Cluster.Builder().AddContactPoint("127.0.0.1").Build();
ISession session = cluster.Connect("timeseries");
RowSet result = session.Execute("SELECT symbol, ts FROM underlying_data WHERE ts > "
+ ninetySeventyTicks.ToString()
+ " and symbol = 'SPX'"
//+ "AllowFiltering"
+ ";");
rows = result.GetRows();
但我有一个例外:
Message = "No indexed columns present in by-columns clause with Equal operator"
我从一本关于查询cassandra的书中复制了这个例子。唯一的区别是这本书使用了CQL而不是C#驱动程序。
这是否可行?如果可行,建议的解决方案是什么?
老实说,当涉及到二级索引时,最好的策略是避免使用它们。
通过将ts
添加到PRIMARY KEY中,可以很容易地使该查询工作。
PRIMARY KEY (symbol,ts)
这里,symbol
是分区密钥,而ts
是聚类密钥。这将允许您指定一个symbol
,并根据ts
的值筛选结果。