Cassandra_ Cassandra 定期删除数据方案 设计
2016-12-09 16:26
405 查看
虽然 Cassandra 本身就是针对于 大数据设计的。但是难免会数据量过大,所以可以定期清除下数据。
场景:清除N天之前 visitor 表内的数据。
经过一天,我总共设计了这几种方案。
方案 一·,二 都使用了 TTL, 这里对TTL进行一个简单的介绍。
TTL :生存时长。在 Cassandra 的计算单位 为 Second 秒
方案一:
插入数据的时候指定 TTL
示例:
INSERT INTO latest_temperatures(weatherstation_id,event_time,temperature)
VALUES (’1234ABCD’,’2013-04-03 07:02:00′,’73F’) USING TTL 20;
关于时间相关属性的参考文档:
https://academy.datastax.com/resources/getting-started-time-series-data-modeling
-----------------
方案二:
给表设定TTL
相关属性:
default_time_to_live 默认的生存时长
表的全部属性介绍:
http://docs.datastax.com/en/cql/3.1/cql/cql_reference/tabProp.html
示例:
创建表
CREATE TABLE test_ttl(
id int PRIMARY KEY,
value text
) WITH bloom_filter_fp_chance = 0.01
AND caching = '{"keys":"ALL", "rows_per_partition":"NONE"}'
AND comment = ''
AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy'}
AND compression = {'sstable_compression': 'org.apache.cassandra.io.compress.LZ4Compressor'}
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 30
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99.0PERCENTILE';
插入数据:
INSERT INTO test_ttl(id,value)
VALUES (1, '2013-04-03');
校验数据:
SELECT * FROM test.test_ttl;
修改默认的生命时长:
ALTER TABLE test.test_ttl WITH default_time_to_live = 120;
-------------------------------------
方案三:
维护一个额外的插入时间字段
类似于:
https://academy.datastax.com/resources/getting-started-time-series-data-modeling
-------------------------------
方案四: (该方案不可行)
利用WRITETIME 筛选数据
方案不可行的原因:
WRITETIME 的使用示例:
CREATE TABLE test_index(
id int PRIMARY KEY,
value text
) WITH bloom_filter_fp_chance = 0.01
AND caching = '{"keys":"ALL", "rows_per_partition":"NONE"}'
AND comment = ''
AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy'}
AND compression = {'sstable_compression': 'org.apache.cassandra.io.compress.LZ4Compressor'}
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 0
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99.0PERCENTILE';
INSERT INTO test_index(id,value) VALUES (2, 'GoGo');
错误:
SELECT WRITETIME(id) FROM test_index WHERE id=2;
正确:
SELECT WRITETIME(value) FROM test_index WHERE id=2;
WRITETIME 可以转换为 unix 时间戳, 只要截取前10位即可
1481268509217414 -> 1481268509
更多关于 WRITETIME 的介绍:
https://docs.datastax.com/en/cql/3.1/cql/cql_using/use_writetime.html
http://stackoverflow.com/questions/31184376/how-to-filter-cassandra-result-based-on-writetime
场景:清除N天之前 visitor 表内的数据。
经过一天,我总共设计了这几种方案。
方案 一·,二 都使用了 TTL, 这里对TTL进行一个简单的介绍。
TTL :生存时长。在 Cassandra 的计算单位 为 Second 秒
方案一:
插入数据的时候指定 TTL
示例:
INSERT INTO latest_temperatures(weatherstation_id,event_time,temperature)
VALUES (’1234ABCD’,’2013-04-03 07:02:00′,’73F’) USING TTL 20;
关于时间相关属性的参考文档:
https://academy.datastax.com/resources/getting-started-time-series-data-modeling
-----------------
方案二:
给表设定TTL
相关属性:
default_time_to_live 默认的生存时长
表的全部属性介绍:
http://docs.datastax.com/en/cql/3.1/cql/cql_reference/tabProp.html
示例:
创建表
CREATE TABLE test_ttl(
id int PRIMARY KEY,
value text
) WITH bloom_filter_fp_chance = 0.01
AND caching = '{"keys":"ALL", "rows_per_partition":"NONE"}'
AND comment = ''
AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy'}
AND compression = {'sstable_compression': 'org.apache.cassandra.io.compress.LZ4Compressor'}
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 30
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99.0PERCENTILE';
插入数据:
INSERT INTO test_ttl(id,value)
VALUES (1, '2013-04-03');
校验数据:
SELECT * FROM test.test_ttl;
修改默认的生命时长:
ALTER TABLE test.test_ttl WITH default_time_to_live = 120;
-------------------------------------
方案三:
维护一个额外的插入时间字段
类似于:
https://academy.datastax.com/resources/getting-started-time-series-data-modeling
-------------------------------
方案四: (该方案不可行)
利用WRITETIME 筛选数据
方案不可行的原因:
WRITETIME 的使用示例:
CREATE TABLE test_index(
id int PRIMARY KEY,
value text
) WITH bloom_filter_fp_chance = 0.01
AND caching = '{"keys":"ALL", "rows_per_partition":"NONE"}'
AND comment = ''
AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy'}
AND compression = {'sstable_compression': 'org.apache.cassandra.io.compress.LZ4Compressor'}
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 0
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99.0PERCENTILE';
INSERT INTO test_index(id,value) VALUES (2, 'GoGo');
错误:
SELECT WRITETIME(id) FROM test_index WHERE id=2;
正确:
SELECT WRITETIME(value) FROM test_index WHERE id=2;
WRITETIME 可以转换为 unix 时间戳, 只要截取前10位即可
1481268509217414 -> 1481268509
更多关于 WRITETIME 的介绍:
https://docs.datastax.com/en/cql/3.1/cql/cql_using/use_writetime.html
http://stackoverflow.com/questions/31184376/how-to-filter-cassandra-result-based-on-writetime
相关文章推荐
- 行政区划数据方案设计
- 在Oracle中删除表中设计de重复数据
- 跨JAVA WEB工程远程数据传输方案设计
- 【设计】客户端更新定义数据(Definition)的几个方案 推荐
- 定期自动删除数据
- 数据共享方案设计
- Oracle大量删除数据方案
- 智能数据仓库的设计方案
- Cassandra集群数据初始化方案的构想
- 流数据缓冲库设计方案
- 误删除、误格式化数据灾难应急方案(WINDOWS平台)
- 树形数据处理方案 收藏 树形数据的排序,新增,修改,复制,删除,数据完整性检查,汇总统计
- 基于COM技术的分布式栅格数据引擎设计方案与应用
- 项目开发 - 数据字典设计方案
- 应用开发中数据字典项设计实现方案
- 写行政区划数据方案设计系列有感
- 以XML为数据传输格式的Web service设计方案示列
- 通过SSIS设计ETL来将Oracle/DB2/Sybase等数据源的数据定期导入到数据仓库(二)
- SQL Server 2005 自动化删除表分区设计方案
- win2003系统通过ftp自动上传数据及定期删除脚本