Cassandra使用一个类似于日志结构的结合树(Log-Structured Merge Tree)的存储结构,不像传统关系数据库那样使用B-Tree。 Cassandra会避免在写之前去读。
“写前读”(Read-before-write), 特别是在一个大的分布式系统里,会对读性能产生影响,还会带来其它问题,比如,两个客户端同时去读,其中一个去更新该行的A列,另外一个去更新该行的B列,就可能把对A列的更新覆盖掉。“写前读”,也会破坏cache,增加IO。
为了避免“写前读”的情况,cassandra的存储引擎会对即将要进行的插入、更新进行整理,只会按顺序,以追加的模式仅写入这一行更新的部分。
。
一个日志模式的存储引擎,为了避免数据相互覆盖,使用顺序IO去更新数据写入普通硬盘HDD或者固态硬盘SSD是必须的。
在HDD中,随机写比顺序写会导致大量的寻址操作,这个寻址操作的危害是相当大的。使用顺序IO,从而避免更多写入被放大和磁盘故障,Cassandra特别适合廉价的、大众消费的SSD。
除非注明,赵岩的博客文章均为原创,转载请以链接形式标明本文地址
本文地址:https://zhaoyanblog.com/archives/930.html
上个问题有点儿问题,正确的是这样的:
create or replace function bigint_plus(res list)
returns null on null input
returns bigint
language java
as ‘
java.util.List results = res;
Long result = 0l;
if(results.size() > 1){
for(Long element : results){
result += element;
}
}else{
result = results.get(0);
}
return result;
‘;
表结构:
create table IF NOT EXISTS mykeyspace1.r_sp_flow_5m(
sp text,
record_time timestamp,
area_flow_rate map,
area_isp_flow_rate map,
flow_rate bigint,
r_d_flow_rate bigint,
isp_flow_rate map,
PRIMARY KEY (sp,record_time)
);
我想查询select bigint_plus([flow_rate,r_d_flow_rate]) from r_sp_flow_5m;但是这样写不对,请问这种的该怎么写
cassandra里写了一个udf:
create or replace function bigint_plus(res list)
returns null on null input
returns bigint
language java
as ‘
java.util.List results = res;
Long result = 0l;
if(results.size() > 1){
for(Long element : results){
result += element;
}
}else{
result = results.get(0);
}
return result;
‘;
那我cql查询的时候怎么用这个定义的bigint_plus函数呢?
cassandra里的session,每次打开都比较慢,session能一直开着吗?
不是能不能,就需要一直开着,一个session就是一个连接池。
create table IF NOT EXISTS mykeyspace1.r_sp_flow_5m(
sp text,
record_time timestamp,
area_flow_rate map,
area_isp_flow_rate map,
flow_rate bigint,
isp_flow_rate map,
PRIMARY KEY (sp,record_time)
);
当我查询:
SELECT record_time,isp_flow_rate FROM mykeyspace1.r_sp_flow_1m WHERE record_time>=’2016-07-18 04:00:00+0800′
AND record_time<'2016-07-18 10:45:00+0800' AND sp IN ('wasu','tbugc','vimg','vvod','t2cn','shcdn','shsis','shclo', 'cmvid','tvxio','spmk','SHPOR','qnw','hlwb1','hlvd','dlb','cmcctemp','CMCCTST','hlzb','shcacti','zwxx','7nlgw', 'SH_LOGDOWN','hdff','hdcj','xlwhls','dlbapk','xjsx','astvxx','sdtv','borncloud','9xiu','51auto','ADN_PORTAL', 'xinan','testhz','ph51','cdvcloud','xinanbj','testbj','xinangd','testgd','xinanhb','testhb','zqlive', 'bjbgp_top01','bjbgp_top02','whunicom_top01','whcnnet_top02','tongbu','xinan_sc','winisms','test_sc', 'test2_sc','Hxat','thaima','tjnsbd','shcnnet_top01','shcnnet_top02','shatacacti','tbfwl','zsctnet_top01', 'zsctnet_top02','tyoum','ywbnzzt','domainnslookup','ywbnffdc','wanbatv','tfengx','vpntest','tqiku', 'tqijia','huoxiu','sptest','tianmai','tbokecc','szlive','tjac','hmlive','tvgdn','wmsj','elive','nullsp', 'bestv','downloadtest','ltdk','yiyun','testhls','suicam','gystv','tmmb','huaxia','htlive','gdctms', '139b2b','ttest','zjxs','wepiao','dfsj','chunshuitang','adncst','dusl','workercn','ebhnet','unixidc', 'wanke','mgtv','gouwubang','teddymobile','yppl','xlwlive','koolearn','shatacloud','suning','xiaoying', '163upload','pudonglive','nwd','jiayou','tvmore','sportlive','cqtj','aipai','fyfx','5173cdn','vtccloud', 'shatalibs','tcpmeituan','klhz','jjhlive','hn_live_165','qjwl','xdy','xlwtest','gotlive','yunduan', 'yjwl','gensee','gcloud','zbjy','kdwl','vhall','blive','xlwcdn','gly') ; 这样查询的效率比较慢,请问有什么好的办法可以提高查询效率吗
sp是分区主键,你的sp由不一样,这个查询肯定不快。
你可以异步并发请求每个sp。