此缩容非彼缩容
无论是在ORACLE、MSSQL中都会存在着扩容、缩容的操作,并且这个技能基本是DBA所必备的。下面是本人的一点理解:
- 扩容:数据在增长,在快达到磁盘或数据库的容量时,增加磁盘和或表空间的一种操作。
- 缩容:在delete、update、insert操作平凡的表中会产生许多的磁盘碎片,这是后需要对碎片进行整理或者对表数据进行从新生成一次,从而达到减小容量的目的。
而现在要说的扩容和缩容是结业某种业务场景的(其实就是分库分表的数据迁移):
- 扩容:在预计访问会爆增之前。增加机器,并分库分表将数据进行迁移,让压力进行分散处理。从而能度过高频反问时期。
- 缩容:在高频访问时期过去了,再将数据进行汇集。以至于能腾出机器,从而达到减少成本的一种做法。
扩容其实在之前分库分表的时候从操作过了。只是之前我们不知道那样就叫做扩容。
缩容
下面我们演示将test_3的库数据进行迁移
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
if __name__==‘__main__’:
# 设置公共库配置
db_config_common = {
‘user’ : ‘root’,
‘password’: ‘root’,
‘host’ : ‘127.0.0.1’,
‘port’ : 3306,
‘database’: ‘test’
}
sharding = ShardingDatabase()
# 设置公共数据库配置
sharding.get_conn_cursor(db_config_common, ‘common’)
# 获得数据存在test_3的用户
select_sql = ”‘
SELECT username FROM user where db_name = ‘test_3‘
‘”
sharding.cursor_select_common.execute(select_sql)
username_list = []
for (username,) in sharding.cursor_select_common:
username_list.append(username)
for username in username_list:
# 指定用户数据到 test_2库 表7
sharding.move_data(username, ‘test_2’, 7)
# 删除库 test_3
drop_db_sql = ”‘
DROP DATABASE test_3
‘”
sharding.cursor_dml_common.execute(drop_db_sql)
|
源码:reduce_capacity
查看迁移后数据:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
— 库test_3已经被删除
show databases;
+——————–+
| Database |
+——————–+
| test |
| test_1 |
| test_2 |
+——————–+
— 在test_2库的用户数据
SELECT * FROM test.user WHERE db_name = ‘test_2’;
+———+————+————+————+———+
| user_id | username | password | table_flag | db_name |
+———+————+————+————+———+
| 3 | username3 | password3 | 7 | test_2 |
| 7 | username7 | password7 | 3 | test_2 |
| 55 | username55 | password55 | 6 | test_2 |
+———+————+————+————+———+
SELECT * FROM buy_order_7 WHERE user_id = 3 LIMIT 0, 2;
+———————+———+—————+——-+——–+
| buy_order_id | user_id | user_guide_id | price | status |
+———————+———+—————+——-+——–+
| 3794292612787081217 | 3 | 1 | 0.00 | 0 |
| 3794292612803858433 | 3 | 1 | 0.00 | 0 |
+———————+———+—————+——-+——–+
SELECT * FROM order_goods_7
WHERE sell_order_id = 3794292749739495425
LIMIT 0, 1;
+———————+———————+———————+—————+——–+——+
| order_goods_id | sell_order_id | goods_id | user_guide_id | price | num |
+———————+———————+———————+—————+——–+——+
| 3794293053134475265 | 3794292749739495425 | 3794292588254597121 | 7 | 630.00 | 2 |
+———————+———————+———————+—————+——–+——+
|
文章转载来自:ttlsa.com