分库分表

文章整理于网上内容, 更多详细内容参考底部[相关资料]

水平分表、垂直分表、水平分库分表、垂直分库

为什么要分库分表? 需要解决什么问题?

业务量高速增长后, 之前的数据表数据读写开始不适应, 响应系统效率及用户体验. 解决I/O问题.

垂直分表

通俗讲”大表拆小表”, 拆表便于开发和维护但是改写以前的查询语句, 会额外带来一定的成本和风险. 拆分字段的操作建议在数据库设计阶段做好.

垂直分库

垂直分库在”微服务”非常普及了, 按照业务模块划分出不同的数据库, 而不是所有的表都放在同一个数据库中.

水平分表

水平分表也叫横向分表, 将表中不同的数据行按照一定规律分布到不同的数据库表中, 降低单表数量, 优化查询性能. 常见方式通过主键或时间等字段进行Hash和取模后拆分. 分表后还是在同一个数据库中还是会有I/O瓶顶.

水平分库分表

思路和水平分表一样, 不同的是分的表在不同的数据库中, 很多大型互联网公司选择的做法.

跨库Join问题

全局表: 类似”数据字典”, 每个库都保留一份.

字段冗余: 需要关联查询的字段做冗余(空间换时间), 避免join.

数据同步: ETLI工具实施

系统层组装: 详见[分库分表的几种常见形式以及可能遇到的难]

跨库事务问题

以往在代码中通过spring注解简单配置就能实现事务的, 现在则需要花很大的成本去保证一致性.

相关资料

分库分表的几种常见形式以及可能遇到的难
大众点评订单系统分库分表实践

内网穿透FRP

配置Nginx转发端口共用一个80端口

server {
    listen 80;
    server_name *.frp.example.com;
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header    Host            $host:80;
        proxy_set_header    X-Real-IP       $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_hide_header   X-Powered-By;
    }
}

相关资料

GTIHUB-frp
有哪些简单实用的端口映射(内网穿透)软件工具?
让 frp 和 nginx 一起使用 80 端口