Skip to content

Ewe来由

YSLT edited this page Jun 6, 2019 · 5 revisions

Ewe是什么意思?

Ewe是母绵羊的意思,我自己爱吃羊肉串,烤羊肉最好的是绵羊,当然是母绵羊,肉多.

为什么要写这个读写分离组件?

Spring支持的多数据源

Spring提供的AbstractRoutingDataSource实现多数据源切换,具体使用这里就不说了,
可以自行google,这里简单过一下基本原理.
典型的用法是:
  利用aop拦截service的方法调用,然后根据方法上设置的dbType来选择初始化好的dataSource实例,
  然后赋值给db层即可.
存在的问题是:
  手动在方法上设置使用哪个dataSource,当我们的db架构是读写分离时,使用起来很麻烦.

Ewe怎么做的

基本流程: 
  创建一个包含多个数据源的统一数据源,拦截所有的SQL,然后做词法语法分析,
  分析出该SQL是读还是写(包含强制hint走读or写),
  然后自动选择相应的dataSource执行SQL.
SQL解析: 
  这里仅仅支持MySQL,且仅支持少量并常用的SQL语法(想要完整的SQL支持就使用温高铁的Druid吧).

SQL解析为啥手写

手写原因一般有几个:
1.代码洁癖(如果你用工具,如:Lucene里面用的JavaCC,会发现生成一堆"机器"代码,看着很不舒服)
2.精细控制(手写的可以控制更加精细).
3.效率(一般手写的分析比parser generator生成的代码效率高一些).