cassandra表重命名方案

 

cql3.0中并没有给出重命名表的方式,所以需要从cassandra启动读取数据库文件、快照备份和还原的原理来入手

cassandra启动时会加载system_schema中的表的元信息然后根据这些元信息去定位数据文件位置

而cassandra快照的原理又是如下

 

1.将原有表目录下的文件做硬链接至./snapshots/目录下(元信息等一些比较小的文件采用直接写入的方式,data文件采用硬链接的方式)

2.保留原本的文件,新建sstable,之后的数据全部往新的sstable中写入

 

因此结合起来就有了如下方案

原表名test_keyspace.original_table
1.复制原表名,建立一张相同结构的test_keyspace.new_table
2.执行
select id from system_schema.tables where keyspace_name='test_keyspace' and table_name='original_table';
获取旧表id(去掉uuid中的-) 83663110f34e11e684938968567b65fc
3.执行
select id from system_schema.tables where keyspace_name='test_keyspace' and table_name='new_table';
获取新表id(去掉uuid中的-) 8f0650e01e8c11e7806a711ecf84b4d2
4.停止该表写入
5.执行./nodetool flush将内存中文件写入数据库
6.执行./nodetool compact test_keyspace original_table合并sstable
7.cd进入original_table-83663110f34e11e684938968567b65fc
8.执行ls ./|xargs -i ln ./{} ../new_table-8f0650e01e8c11e7806a711ecf84b4d2/{}把内容硬链接到新表目录下(这个时候new_table因为是新表的原因应该并没有任何数据库文件,如果有,删掉)
9.执行./nodetool refresh test_keyspace new_table同步新表数据
10.删掉旧表
11.开启新表写入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值