mysql shharding_MySQL分库分表python实现分库(7th)

理清思路

现在我们分为两大个步骤:

1、创建分库,并在分库中创建分表。

2、能指定用户的数据到特定的库和表。

现在我们有两个数据库了:

1、test库:里面存放了公共访问的数据表,因此在python我们需要有一个公共数据源。

2、test_1分库:里面存放的是需要分表的表和数据,因此我们需要一个用户原数据所在的数据源。

3、test_n分库:此库是用户的数据需要迁移到其他库的库,因此我们需要一个数据迁移的目录库数据源。

分库流程图

21bf0f782182caeaf303a5a92cc357a6.png

主执行过程

if __name__=='__main__':

# 设置默认的数据库链接参数

db_config_common = {

'user'    : 'root',

'password': 'root',

'host'    : '127.0.0.1',

'port'    : 3306,

'database': 'test'

}

# 配置用户数据所在数据库源

db_config_from = {

'user'    : 'root',

'password': 'root',

'host'    : '127.0.0.1',

'port'    : 3306,

'database': 'test_1'

}

# 配置用户数据迁移目标数据目录

db_config_from = {

'user'    : 'root',

'password': 'root',

'host'    : '127.0.0.1',

'port'    : 3306,

}

sharding = ShardingDatabase()

# 设置公共数据库配置

sharding.get_conn_cursor(db_config_common, 'common')

# 设置用户原数据数据库配置

sharding.get_conn_cursor(db_config_from, 'from')

# 设置用户目标数据库配置

sharding.get_conn_cursor(db_config_to, 'to')

# 创建分库

db_config_to.pop('database')

sharding.create_db(db_config_to)

# 向分库中创建分表

max_num = sharding.get_max_sharding_table_num()

sharding.create_tables(begin = 1, offset = max_num, force=True)

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

35

36

37

38

39

40

if __name__=='__main__':

# 设置默认的数据库链接参数

db_config_common = {

'user'    : 'root',

'password': 'root',

'host'    : '127.0.0.1',

'port'    : 3306,

'database': 'test'

}

# 配置用户数据所在数据库源

db_config_from = {

'user'    : 'root',

'password': 'root',

'host'    : '127.0.0.1',

'port'    : 3306,

'database': 'test_1'

}

# 配置用户数据迁移目标数据目录

db_config_from = {

'user'    : 'root',

'password': 'root',

'host'    : '127.0.0.1',

'port'    : 3306,

}

sharding = ShardingDatabase()

# 设置公共数据库配置

sharding.get_conn_cursor(db_config_common, 'common')

# 设置用户原数据数据库配置

sharding.get_conn_cursor(db_config_from, 'from')

# 设置用户目标数据库配置

sharding.get_conn_cursor(db_config_to, 'to')

# 创建分库

db_config_to.pop('database')

sharding.create_db(db_config_to)

# 向分库中创建分表

max_num = sharding.get_max_sharding_table_num()

sharding.create_tables(begin = 1, offset = max_num, force=True)

执行分库程序

python sharding_database.py

python sharding_database.py

1

2

pythonsharding_database.py

pythonsharding_database.py

执行后结果

SHOW DATABASES;

+--------------------+

| Database           |

+--------------------+

| test               |

| test_1             |

| test_2             |

| test_3             |

+--------------------+

SELECT * FROM test.system_setting;

+-------------------+---------------------------+-----------------------------------------------------------------------------------------------+

| system_setting_id | name                      | value                                                                                         |

+-------------------+---------------------------+-----------------------------------------------------------------------------------------------+

|                18 | max_sharding_database_num | 3                                                                                             |

|                19 | sharding_database         | test_1                                                                                        |

|                20 | test_1                    | {'user':'root','password':'root','host':'127.0.0.1','port':3306,'database':'test_1'}          |

|                21 | sharding_database_prefix  | test                                                                                          |

|                38 | harding_database          | test_2                                                                                        |

|                39 | test_2                    | {"port": 3306, "host": "127.0.0.1", "password": "root", "user": "root", "database": "test_2"} |

|                40 | harding_database          | test_3                                                                                        |

|                41 | test_3                    | {"port": 3306, "host": "127.0.0.1", "password": "root", "user": "root", "database": "test_3"} |

+-------------------+---------------------------+-----------------------------------------------------------------------------------------------+

USE test_2

SHOW TABLES;

+------------------+

| Tables_in_test_2 |

+------------------+

| buy_order_1      |

| buy_order_10     |

| buy_order_2      |

| buy_order_3      |

| buy_order_4      |

| buy_order_5      |

...

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

SHOW DATABASES;

+--------------------+

| Database           |

+--------------------+

| test               |

| test_1             |

| test_2             |

| test_3             |

+--------------------+

SELECT * FROM test.system_setting;

+-------------------+---------------------------+-----------------------------------------------------------------------------------------------+

| system_setting_id | name                      | value                                                                                         |

+-------------------+---------------------------+-----------------------------------------------------------------------------------------------+

|                18 | max_sharding_database_num | 3                                                                                             |

|                19 | sharding_database         | test_1                                                                                        |

|                20 | test_1                    | {'user':'root','password':'root','host':'127.0.0.1','port':3306,'database':'test_1'}          |

|                21 | sharding_database_prefix  | test                                                                                          |

|                38 | harding_database          | test_2                                                                                        |

|                39 | test_2                    | {"port": 3306, "host": "127.0.0.1", "password": "root", "user": "root", "database": "test_2"} |

|                40 | harding_database          | test_3                                                                                        |

|                41 | test_3                    | {"port": 3306, "host": "127.0.0.1", "password": "root", "user": "root", "database": "test_3"} |

+-------------------+---------------------------+-----------------------------------------------------------------------------------------------+

USE test_2

SHOW TABLES;

+------------------+

| Tables_in_test_2 |

+------------------+

| buy_order_1      |

| buy_order_10     |

| buy_order_2      |

| buy_order_3      |

| buy_order_4      |

| buy_order_5      |

...

python迁移用户数据到指定的分库分表

流程图

65ab0fe4d73527504c05ab86d8a5bf18.png

主程序

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')

# 指定用户数据到 哪个库 哪个表,如:用户username3数据迁移到 test_3库 10号表

sharding.move_data('username3', 'test_3', 10)

sharding.move_data('username7', 'test_2', 3)

sharding.move_data('username55', 'test_2', 6)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

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')

# 指定用户数据到 哪个库 哪个表,如:用户username3数据迁移到 test_3库 10号表

sharding.move_data('username3', 'test_3', 10)

sharding.move_data('username7', 'test_2', 3)

sharding.move_data('username55', 'test_2', 6)

上面程序展示了将三位用户的数据迁移到指定的分库和分表中:

1、用户:username3 -> 库:test_3 -> 表:*_10

2、用户:username7 -> 库:test_2 -> 表:*_3

3、用户:username55 -> 库:test_2 -> 表:*_6

迁移后结果展示

SELECT * FROM user;

+---------+-------------+-------------+------------+---------+

| user_id | username    | password    | table_flag | db_name |

+---------+-------------+-------------+------------+---------+

|       3 | username3   | password3   |         10 | test_3  |

|       7 | username7   | password7   |          3 | test_2  |

|      55 | username55  | password55  |          6 | test_2  |

...

USE test_3

SELECT * FROM sell_order_10 LIMIT 0, 1;

+---------------------+---------------+---------+---------+--------+

| sell_order_id       | user_guide_id | user_id | price   | status |

+---------------------+---------------+---------+---------+--------+

| 3792112071144902657 |             7 |      10 | 9720.00 |      1 |

+---------------------+---------------+---------+---------+--------+

SELECT * FROM buy_order_10 LIMIT 0, 1;

+---------------------+---------+---------------+

| buy_order_id        | user_id | user_guide_id |

+---------------------+---------+---------------+

| 3792111974680104961 |       3 |             1 |

+---------------------+---------+---------------+

SELECT * FROM goods_10 LIMIT 0, 1;

+---------------------+------------+--------+----------+

| goods_id            | goods_name | price  | store_id |

+---------------------+------------+--------+----------+

| 3792111953670836225 | goods1     | 370.00 |        3 |

+---------------------+------------+--------+----------+

SELECT * FROM order_goods_10 LIMIT 0, 1;

+---------------------+---------------------+---------------------+---------------+--------+------+

| order_goods_id      | sell_order_id       | goods_id            | user_guide_id | price  | num  |

+---------------------+---------------------+---------------------+---------------+--------+------+

| 3792112350317776897 | 3792112071144902657 | 3792111953670836225 |             7 | 370.00 |    1 |

+---------------------+---------------------+---------------------+---------------+--------+------+

USE test_2

SELECT * FROM sell_order_3 LIMIT 0, 1;

+---------------------+---------------+---------+---------+--------+

| sell_order_id       | user_guide_id | user_id | price   | status |

+---------------------+---------------+---------+---------+--------+

| 3792112052236980225 |             6 |      10 | 7790.00 |      1 |

+---------------------+---------------+---------+---------+--------+

SELECT * FROM buy_order_3 LIMIT 0, 1;

+---------------------+---------+---------------+

| buy_order_id        | user_id | user_guide_id |

+---------------------+---------+---------------+

| 3792111974399086593 |       7 |             1 |

+---------------------+---------+---------------+

SELECT * FROM order_goods_3 LIMIT 0, 1;

+---------------------+---------------------+---------------------+---------------+---------+------+

| order_goods_id      | sell_order_id       | goods_id            | user_guide_id | price   | num  |

+---------------------+---------------------+---------------------+---------------+---------+------+

| 3792112312489349121 | 3792112052236980225 | 3792111952869724161 |             6 | 6368.00 |    2 |

+---------------------+---------------------+---------------------+---------------+---------+------+

USE test_2

SELECT * FROM buy_order_3 LIMIT 0, 1;

+---------------------+---------+---------------+

| buy_order_id        | user_id | user_guide_id |

+---------------------+---------+---------------+

| 3792111974399086593 |       7 |             1 |

+---------------------+---------+---------------+

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

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

SELECT * FROM user;

+---------+-------------+-------------+------------+---------+

| user_id | username    | password    | table_flag | db_name |

+---------+-------------+-------------+------------+---------+

|       3 | username3   | password3   |         10 | test_3  |

|       7 | username7   | password7   |          3 | test_2  |

|      55 | username55  | password55  |          6 | test_2  |

...

USE test_3

SELECT * FROM sell_order_10 LIMIT 0, 1;

+---------------------+---------------+---------+---------+--------+

| sell_order_id       | user_guide_id | user_id | price   | status |

+---------------------+---------------+---------+---------+--------+

| 3792112071144902657 |             7 |      10 | 9720.00 |      1 |

+---------------------+---------------+---------+---------+--------+

SELECT * FROM buy_order_10 LIMIT 0, 1;

+---------------------+---------+---------------+

| buy_order_id        | user_id | user_guide_id |

+---------------------+---------+---------------+

| 3792111974680104961 |       3 |             1 |

+---------------------+---------+---------------+

SELECT * FROM goods_10 LIMIT 0, 1;

+---------------------+------------+--------+----------+

| goods_id            | goods_name | price  | store_id |

+---------------------+------------+--------+----------+

| 3792111953670836225 | goods1     | 370.00 |        3 |

+---------------------+------------+--------+----------+

SELECT * FROM order_goods_10 LIMIT 0, 1;

+---------------------+---------------------+---------------------+---------------+--------+------+

| order_goods_id      | sell_order_id       | goods_id            | user_guide_id | price  | num  |

+---------------------+---------------------+---------------------+---------------+--------+------+

| 3792112350317776897 | 3792112071144902657 | 3792111953670836225 |             7 | 370.00 |    1 |

+---------------------+---------------------+---------------------+---------------+--------+------+

USE test_2

SELECT * FROM sell_order_3 LIMIT 0, 1;

+---------------------+---------------+---------+---------+--------+

| sell_order_id       | user_guide_id | user_id | price   | status |

+---------------------+---------------+---------+---------+--------+

| 3792112052236980225 |             6 |      10 | 7790.00 |      1 |

+---------------------+---------------+---------+---------+--------+

SELECT * FROM buy_order_3 LIMIT 0, 1;

+---------------------+---------+---------------+

| buy_order_id        | user_id | user_guide_id |

+---------------------+---------+---------------+

| 3792111974399086593 |       7 |             1 |

+---------------------+---------+---------------+

SELECT * FROM order_goods_3 LIMIT 0, 1;

+---------------------+---------------------+---------------------+---------------+---------+------+

| order_goods_id      | sell_order_id       | goods_id            | user_guide_id | price   | num  |

+---------------------+---------------------+---------------------+---------------+---------+------+

| 3792112312489349121 | 3792112052236980225 | 3792111952869724161 |             6 | 6368.00 |    2 |

+---------------------+---------------------+---------------------+---------------+---------+------+

USE test_2

SELECT * FROM buy_order_3 LIMIT 0, 1;

+---------------------+---------+---------------+

| buy_order_id        | user_id | user_guide_id |

+---------------------+---------+---------------+

| 3792111974399086593 |       7 |             1 |

+---------------------+---------+---------------+

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《离散数学及其应用》是一本写给大学生学习离散数学的教材,由肯尼思·罗森(Kenneth Rosen)编写的第七版。这本教材广泛被全球大学使用,被认为是离散数学的经典教材之一。 该书的主要内容包括逻辑、集合论、证明技巧、算法、图论、组合学、递归等等。它的目标是帮助学生培养解决离散数学问题的能力,并应用到计算机科学、信息科学等领域。 《离散数学及其应用》的第七版相对于之前的版本进行了更新和改进。这本书的特点是深入浅出、结构清晰,并通过大量的例题和习题来帮助读者理解和巩固所学的知识。此外,该书还提供了很多实际应用的案例,以帮助读者将理论知识应用到实际问题中。 这本教材的编写风格简单明了,循序渐进,适合初学者学习。它不仅介绍了基础概念和技术,还包含了一些前沿的研究成果,使读者能够了解到离散数学的最新进展。 总的来说, 《离散数学及其应用》是一本优秀且经典的教材,对于学习离散数学的学生和从事相关领域的研究者来说都是一本不可多得的学习和参考资料。无论是想深入了解离散数学理论知识,还是应用到实际问题中,这本书都将是一个非常有价值的工具。 ### 回答2: 《离散数学及其应用(第7版)》是一本经典的数学教材,由肯尼斯·罗森(Kenneth Rosen)编写。该书广泛应用于计算机科学、信息技术和工程等领域的离散数学课程。 该教材主要包括了离散数学的核心概念和方法,如集合论、命题逻辑、谓词逻辑、证明技巧、图论、组合数学、概率论等内容。每一章节都有大量的例子和习题,帮助读者理解和掌握相关概念和技巧。 与其他教材相比,这本书的特点之一是强调数学的应用。例如,在图论部分,书中介绍了图的应用于计算机网络、社交网络和电路设计等方面,并提供了相关的算法和技巧。此外,该书还涵盖了离散数学在密码学、信息安全和计算机算法等领域的应用。 另一个特点是该教材的详细性和全面性。编者在选材上做了周到的考虑,以确保教材尽可能地覆盖离散数学的各个方面。此外,书中内容的组织结构合理,逻辑严谨,帮助读者更好地理解和掌握知识。 总之,《离散数学及其应用(第7版)》是一本经典的离散数学教材,适用于计算机科学、信息技术和工程领域的学生和从业人员。通过学习这本教材,读者可以系统地理解离散数学的基本概念和方法,并能够应用于实际问题的求解。 ### 回答3: 《离散数学及其应用 第7版》是美国著名数学家Kenneth H. Rosen所著的一本教材,广泛应用于离散数学的学习和教学。这本教材被广泛认为是离散数学领域的经典教材之一,内容丰富全面,涵盖了离散数学的各个方面。 该书分为7个部分,分别是基础概念、结构和函数、归纳和递归、计数和概率、图论、树和算法、布尔代数和自动机。每个部分都由多个章节组成,侧重于讲解相应领域的核心概念和基本原理。该书的语言简单明了,循序渐进,既适合作为初学者的入门书,也适合作为高级学习者的参考书。 《离散数学及其应用 第7版》的特点之一是其丰富的例题和习题。每个章节都提供了大量的例题来帮助读者理解概念和应用,而且每章末尾还有大量的习题供读者练习。这些例题和习题的设计非常精细,既涵盖了基本知识点的掌握,也拓展了读者的思维和解题能力。此外,书中还提供了答案和解析供读者参考。 总体而言,Kenneth H. Rosen的《离散数学及其应用 第7版》是一本非常优秀的教材,对于学习离散数学的人来说是一个不可多得的宝库。不仅能够帮助读者建立坚实的数学基础,提高解决问题的能力,也能够培养读者的逻辑思维和分析能力。无论是学生、教师还是专业人士,都能从中获得巨大的收益。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值