Sharding-JDBC分库不分表、分库分表,主从分库分表

柔光的暖阳◎ 2022-12-30 15:53 394阅读 0赞

分库不分表、分库分表,主从分库分表

分库不分表

  1. server:
  2. port: 8800
  3. mybatis:
  4. configuration:
  5. map-underscore-to-camel-case: true
  6. use-generated-keys: true
  7. spring:
  8. shardingsphere:
  9. datasource:
  10. names: ds0,ds1
  11. ds0:
  12. type: com.alibaba.druid.pool.DruidDataSource
  13. driver-class-name: com.mysql.jdbc.Driver
  14. url: jdbc:mysql://127.0.0.1:3306/ds0?useUnicode=true&allowMultiQueries=true&characterEncoding=UTF-8&useFastDateParsing=false&zeroDateTimeBehavior=convertToNull
  15. username: xxx
  16. password: xxx
  17. ds1:
  18. type: com.alibaba.druid.pool.DruidDataSource
  19. driver-class-name: com.mysql.jdbc.Driver
  20. url: jdbc:mysql://127.0.0.1:3306/ds1?useUnicode=true&allowMultiQueries=true&characterEncoding=UTF-8&useFastDateParsing=false&zeroDateTimeBehavior=convertToNull
  21. username: xxx
  22. password: xxx
  23. sharding:
  24. default-database-strategy:
  25. inline:
  26. sharding-column: order_id
  27. algorithm-expression: ds$->{ order_id % 2}
  28. tables:
  29. t_order:
  30. actual-data-nodes: ds$->{ 0..1}.t_order
  31. key-generator:
  32. column: order_id
  33. type: SNOWFLAKE
  34. props:
  35. worker:
  36. id: 123
  37. props:
  38. sql:
  39. show: true # 打印sql

分库分表

  1. server:
  2. port: 8800
  3. mybatis:
  4. configuration:
  5. map-underscore-to-camel-case: true
  6. use-generated-keys: true
  7. spring:
  8. shardingsphere:
  9. datasource:
  10. names: ds0,ds1
  11. ds0:
  12. type: com.alibaba.druid.pool.DruidDataSource
  13. driver-class-name: com.mysql.jdbc.Driver
  14. url: jdbc:mysql://127.0.0.1:3306/ds0?useUnicode=true&allowMultiQueries=true&characterEncoding=UTF-8&useFastDateParsing=false&zeroDateTimeBehavior=convertToNull
  15. username: xxx
  16. password: xxx
  17. ds1:
  18. type: com.alibaba.druid.pool.DruidDataSource
  19. driver-class-name: com.mysql.jdbc.Driver
  20. url: jdbc:mysql://127.0.0.1:3306/ds1?useUnicode=true&allowMultiQueries=true&characterEncoding=UTF-8&useFastDateParsing=false&zeroDateTimeBehavior=convertToNull
  21. username: xxx
  22. password: xxx
  23. sharding:
  24. default-database-strategy:
  25. inline:
  26. sharding-column: order_id
  27. algorithm-expression: ds${ order_id % 2}
  28. tables:
  29. t_order:
  30. actual-data-nodes: ds${ 0..1}.t_order_${ 0..1}
  31. table-strategy:
  32. inline:
  33. sharding-column: order_id
  34. algorithm-expression: t_order_${ (order_id % 5) % 2}
  35. key-generator:
  36. column: order_id
  37. type: SNOWFLAKE
  38. props:
  39. worker:
  40. id: 123
  41. props:
  42. sql:
  43. show: true # 打印sql

分表的策略不能跟分库一样,比如都用order_id取模的话,那么就会出现每个数据库中都有一半的数据表没有数据,所以这里分表采取了t_order_${(order_id % 5) % 2}这种先对一个基数取模来解决这个问题。

主从分库分表

  1. server:
  2. port: 8800
  3. mybatis:
  4. configuration:
  5. map-underscore-to-camel-case: true
  6. use-generated-keys: true
  7. spring:
  8. shardingsphere:
  9. datasource:
  10. names: ds0master,ds0slave,ds1master,ds1slave
  11. ds0master:
  12. type: com.alibaba.druid.pool.DruidDataSource
  13. driver-class-name: com.mysql.jdbc.Driver
  14. url: jdbc:mysql://127.0.0.1:3306/ds0master?useUnicode=true&allowMultiQueries=true&characterEncoding=UTF-8&useFastDateParsing=false&zeroDateTimeBehavior=convertToNull
  15. username: xxx
  16. password: xxx
  17. ds0slave:
  18. type: com.alibaba.druid.pool.DruidDataSource
  19. driver-class-name: com.mysql.jdbc.Driver
  20. url: jdbc:mysql://127.0.0.1:3306/ds0slave?useUnicode=true&allowMultiQueries=true&characterEncoding=UTF-8&useFastDateParsing=false&zeroDateTimeBehavior=convertToNull
  21. username: xxx
  22. password: xxx
  23. ds1master:
  24. type: com.alibaba.druid.pool.DruidDataSource
  25. driver-class-name: com.mysql.jdbc.Driver
  26. url: jdbc:mysql://127.0.0.1:3306/ds1master?useUnicode=true&allowMultiQueries=true&characterEncoding=UTF-8&useFastDateParsing=false&zeroDateTimeBehavior=convertToNull
  27. username: xxx
  28. password: xxx
  29. ds1slave:
  30. type: com.alibaba.druid.pool.DruidDataSource
  31. driver-class-name: com.mysql.jdbc.Driver
  32. url: jdbc:mysql://127.0.0.1:3306/ds1slave?useUnicode=true&allowMultiQueries=true&characterEncoding=UTF-8&useFastDateParsing=false&zeroDateTimeBehavior=convertToNull
  33. username: xxx
  34. password: xxx
  35. sharding:
  36. default-database-strategy:
  37. inline:
  38. sharding-column: order_id
  39. algorithm-expression: ds${ order_id % 2}
  40. tables:
  41. t_order:
  42. actual-data-nodes: ds${ 0..1}.t_order_${ 0..1}
  43. table-strategy:
  44. inline:
  45. sharding-column: order_id
  46. algorithm-expression: t_order_${ (order_id % 5) % 2}
  47. key-generator:
  48. column: order_id
  49. type: SNOWFLAKE
  50. props:
  51. worker:
  52. id: 123
  53. master-slave-rules:
  54. ds0:
  55. master-data-source-name: ds0master
  56. slave-data-source-names: ds0slave
  57. ds1:
  58. master-data-source-name: ds1master
  59. slave-data-source-names: ds1slave
  60. props:
  61. sql:
  62. show: true # 打印sql

发表评论

表情:
评论列表 (有 0 条评论,394人围观)

还没有评论,来说两句吧...

相关阅读

    相关 分库

    分库分表 为什么分库分表 在高并发和海量数据的场景下,通过使用分库分表的手段,能够解决单机或者单库单表的性能瓶颈和压力,突破IO、连接数、硬件资源的瓶颈。当然,投入

    相关 分库

    一. 数据切分 关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库、优

    相关 分库

    一、常见面试题 1、为什么分表分库? 2、分表分库中间件有哪些?分别有什么特点? 3、垂直拆分还是水平拆分?有什么区别? 二、问题分析 1、由于用户数量增长,