分表分库如何部署
停机部署法
大致思路就是,挂一个公告,半夜停机升级,然后半夜把服务停了,跑数据迁移程序,进行数据迁移。
步骤如下:
(1) 出一个公告,比如“今晚00:00~6:00进行停机维护,暂停服务”
(2) 写一个迁移程序,读db-old数据库,通过中间件写入新库db-new1和db-new2,具体如下图所示
(3) 校验迁移前后一致性,没问题就切该部分业务到新库。
顺便科普一下,这个中...
2019-02-13 01:48:27 |
Database
数据库优化
数据库优化
在进行MySQL的优化之前,必须要了解的就是MySQL的查询过程,很多查询优化工作实际上就是遵循一些原则,让MySQL的优化器能够按照预想的合理方式运行而已。
ps: mysql-8 之后应该就把缓存这一部分去掉了。
一、优化的哲学
1、优化可能带来的问题?
优化不总是对一个单纯的环境进行,还很可能是一个复杂的已投产的系统;
优化手段本来就有很大的风险,只不过你没...
2019-02-13 01:48:27 |
Database
如何优雅的给图片添加水印
水印的类型
我们见过很多图片,都是有明水印的。一般在图片的右下角,或者图片的中间倾斜的印上某些信息,人眼可以看到。
还有一些水印对图片本身不产生影响,肉眼无法识别,可以通过特定解码,解析出来,我们称之为盲水印。
添加盲水印的方法
添加数字盲水印的方法简单可分为空域方法和频域方法,这两种方法添加了冗余信息,但在编码和压缩情况不变的情况下,不会使原始图像大小产生变化(原来是10MB添加盲...
2019-02-13 01:11:35 |
Tool
跳跃表(SkipList)
什么是跳跃表
跳表由William Pugh发明。
他在论文 《Skip lists: a probabilistic alternative to balanced trees》中详细介绍了跳表的数据结构和插入删除等操作。
跳表是一种可以用来代替平衡树的数据结构,跳表使用概率平衡而不是严格执行的平衡,因此,与等效树的等效算法相比,跳表中插入和删除的算法要简单得多,并且速度要快得多。
...
2019-02-13 01:11:35 |
Data-Struct
java doc 文档注释最佳实践
为什么要写注释?
给别人看
给自己看
java 文档注释?
标签 作用域 说明
@author 类 标明开发该类模块作者
@version 类 标明该类模块的版本
@see 类, 属性, 方法 参考转向(相关主题)
@param 方法 对方法中某参数的说明
@return 方法 对方法返回值的说明
@exception 方法 抛出的异常类型
@throws 方法 与@exceptio...
2019-02-12 13:31:37 |
DevOps
java 对象属性复制(BeanCopy)最佳实践
常见的属性赋值工具
Frameworks that ease bean mapping.
dOOv - Provides fluent API for typesafe domain model validation and mapping. It uses annotations, code generation and a type safe DSL to make bean val...
2019-02-12 13:31:37 |
Java
HTTP 传输 + 号不见了
问题场景
今天排查问题,遇到一个BUG
页面前端传值:
Hello+ World
传到后台变成了
Hello World
一开始没有怀疑这个问题,那到底是为什么呢?
URL 的转移
URL 会对 + 进行转义。
解决方案
修改客户端
将客户端带“+”的参数中的“+”全部替换为“2B%”,这样参数传到服务器端时就能得到“+”了。
加密+解密配合
strURL =...
2019-01-30 07:01:09 |
Web
Facade 设计最佳实践
Facade
facade 应该怎么设计?
最近暴露给外部使用,由于是历史遗留项目,问题很严重。
facade 引入了很多引用。
纯净性
最好的 facade 应该只有 POJO 和 Interface,不包含任何的三方 jar.
内部系统
如果公司内部有比较成熟的架构,可以统一使用公共的 jar。
保证不能有任何的 jar 冲突,不能有任何的冗余 jar。
版本
...
2019-01-30 07:01:09 |
Design