Java
文章平均质量分 84
阿飞的博客
奋斗不息,前进不止!!
展开
-
6. sharding-jdbc源码之group by结果合并(1)
阿飞Javaer,转载请注明原创出处,谢谢!在5. sharding-jdbc源码之结果合并中已经分析了OrderByStreamResultSetMerger、LimitDecoratorResultSetMerger、IteratorStreamResultSetMerger,查看源码目录下ResultSetMerger的实现类,只剩下GroupByMemoryResultSetM...原创 2018-05-08 11:44:25 · 1548 阅读 · 0 评论 -
7. sharding-jdbc源码之group by结果合并(2)
阿飞Javaer,转载请注明原创出处,谢谢!在sharding-jdbc源码之group by结果合并(1)中主要分析了sharding-jdbc如何在GroupByStreamResultSetMerger和GroupByMemoryResultSetMerger中选择,并分析了GroupByStreamResultSetMerger的实现;接下来分析GroupByMemoryRes...原创 2018-05-08 11:45:58 · 1348 阅读 · 0 评论 -
8. sharding-jdbc源码之结果合并总结
阿飞Javaer,转载请注明原创出处,谢谢!分页性能分析性能瓶颈查询偏移量过大的分页会导致数据库获取数据性能低下,以MySQL为例:SELECT * FROM t_order ORDER BY id LIMIT 1000000, 10这句SQL会使得MySQL在无法利用索引的情况下跳过1000000条记录后,再获取10条记录,其性能可想而知。而在分库分表的情...原创 2018-05-08 11:46:46 · 1148 阅读 · 0 评论 -
9. sharding-jdbc源码之最大努力型事务
阿飞Javaer,转载请注明原创出处,谢谢!BASE TransactionBest efforts delivery transaction (已经实现).Try confirm cancel transaction (待定). Sharding-JDBC由于性能方面的考量,决定不支持强一致性分布式事务。最大努力送达型事务在分布式数据库的场景下,相...原创 2018-05-08 11:47:22 · 1326 阅读 · 2 评论 -
10. sharding-jdbc源码之异步送达JOB
阿飞Javaer,转载请注明原创出处,谢谢!最大努力送达型异步JOB任务当最大努力送达型监听器多次失败尝试后,把任务交给最大努力送达型异步JOB任务处理,异步多次尝试处理;核心源码在模块sharding-jdbc-transaction-async-job中。该模块是一个独立异步处理模块,使用者决定是否需要启用,源码比较少,大概看一下源码结构: resouces目录...原创 2018-05-08 11:47:52 · 344 阅读 · 0 评论 -
代码量统计工具源码
源码说明: - VALID_SUFFIX_SET可定制,默认只统计.java源码; - EXCLUDE_DIRECTORY_SET可定制,默认过滤路径包含src/test或者target目录; - main()方法中projectNameList包含要统计源码工程名集合,可定制;默认统计C:\ProjectCode目录下指定工程源码,可定制。package com.afei.util...原创 2018-05-21 15:29:20 · 1532 阅读 · 0 评论 -
18. sharding-jdbc源码之复杂路由实现
阿飞Javaer,转载请注明原创出处,谢谢!!路由条件ParsingSQLRouter.java中决定是简单路由还是复杂路由的条件如下;private RoutingResult route(final List<Object> parameters, final SQLStatement sqlStatement) { Collection<...原创 2018-05-25 17:52:47 · 736 阅读 · 0 评论 -
16. sharding-jdbc源码分析之重写
阿飞Javaer,转载请注明原创出处,谢谢!!核心源码就在sharding-jdbc-core模块的com.dangdang.ddframe.rdb.sharding.rewrite目录下,包含两个文件SQLBuilder和SQLRewriteEngine;测试用例入口为SQLRewriteEngineTest,下面从SQLRewriteEngineTest中debug源码分析shar...原创 2018-05-22 12:27:37 · 716 阅读 · 0 评论 -
15. sharding-jdbc源码之EventBus-轻量级进程内事件分发组件
阿飞Javaer,转载请注明原创出处,谢谢!EventBus来自于google-guava包中。源码注释如下:Dispatches events to listeners, and provides ways for listeners to register themselves.The EventBus allows publish-subscribe-style com...原创 2018-05-16 12:08:25 · 402 阅读 · 0 评论 -
17. SQL重写为limit Integer.MAX_VALUE的无奈
阿飞Javaer,转载请注明原创出处,谢谢!!这篇文章源于sharding-jdbc源码分析之重写的遗留问题,相关sharding-jdbc源码如下:private void appendLimitRowCount(final SQLBuilder sqlBuilder, final RowCountToken rowCountToken, final int count, f...原创 2018-05-23 11:54:26 · 3016 阅读 · 0 评论 -
20.sharding-jdbc2.0.3集成--基于ssm
阿飞Javaer,转载请注明原创出处,谢谢!本篇文章讲解如何在ssm(spring、springmvc、mybatis)结构的程序上集成sharding-jdbc(版本为2.0.3)进行分库分表; 假设分库分表行为如下: - 将auth_user表分到4个库(user_0~user_3)中; - 其他表不进行分库分表,保留在default_db库中;1. POM配置以...原创 2018-05-28 14:04:16 · 1823 阅读 · 4 评论 -
21.sharding-jdbc源码之SQL解析-词法分析
阿飞Javaer,转载请注明原创出处,谢谢!!sharding-jdbc对SQL解析的源码主要在下图所示parsing模块中,由下图可知SQL解析主要分为两部分:lexer和parser。lexer就是本文需要分析的词法分析: 分析sharding-jdbc源码的词法分析之前,先大概说一下词法分析是干嘛的,后面理解起来就会更容易,例如对于SQL:“/! hello, afei /...原创 2018-05-30 21:01:57 · 1139 阅读 · 0 评论 -
22-1.sharding-jdbc源码之INSERT解析
阿飞Javaer,转载请注明原创出处,谢谢!!INSERT语法分析insert解析之前,首先看一下mysql官方对insert语法的定义,因为SQL解析跟语法息息相关:INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [PARTITION (partition...原创 2018-06-01 16:51:03 · 2607 阅读 · 0 评论 -
22-2.sharding-jdbc源码之DELETE解析
阿飞Javaer,转载请注明原创出处,谢谢!!DELETE语法分析delete解析之前,首先看一下mysql官方对delete语法的定义: - Single-Table SyntaxDELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [PARTITION (partition_name [, partiti...原创 2018-06-01 16:51:54 · 1701 阅读 · 0 评论 -
5. sharding-jdbc源码之结果合并
阿飞Javaer,转载请注明原创出处,谢谢!单表查询之结果合并接下来以执行SELECT o.* FROM t_order o where o.user_id=10 order by o.order_id desc limit 2,3分析下面这段Java代码是如何对结果进行合并的:result = new ShardingResultSet(resultSets, new M...原创 2018-05-08 11:43:17 · 792 阅读 · 0 评论 -
4. sharding-jdbc源码之分布式ID
阿飞Javaer,转载请注明原创出处,谢谢!实现动机传统数据库软件开发中,主键自动生成技术是基本需求。而各大数据库对于该需求也提供了相应的支持,比如MySQL的自增键。 对于MySQL而言,分库分表之后,不同表生成全局唯一的Id是非常棘手的问题。因为同一个逻辑表内的不同实际表之间的自增键是无法互相感知的, 这样会造成重复Id的生成。我们当然可以通过约束表生成键的规则来达到数据的不重...原创 2018-05-08 11:31:17 · 2673 阅读 · 0 评论 -
3-1. sharding-jdbc源码之复杂路由实现
阿飞Javaer,转载请注明原创出处,谢谢!路由条件ParsingSQLRouter.java中决定是简单路由还是复杂路由的条件如下;private RoutingResult route(final List<Object> parameters, final SQLStatement sqlStatement) { Collection<Str...原创 2018-05-08 11:24:17 · 1049 阅读 · 0 评论 -
Java获得UTC时间
package com.feima.afei.util;import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;/** * * @author wang zhenfei * */public原创 2013-09-16 01:04:31 · 33647 阅读 · 2 评论 -
居然还有人对字符串拼接操作时StringBuilder/StringBuffer取代“+”有疑问
首先说明:至于是StringBuilder还是StringBuffer去取代“+”,这就是实际应用场景需要考量的,看你的应用场景需要考虑线程安全性与否!每个观点的提出都要有理有据:如下是两段字符串拼接两种实现方式:public class TestA { public static void main(String[] args) { String st原创 2013-02-02 11:48:09 · 5214 阅读 · 0 评论 -
fastjson解析结果顺序不确定
fastjsonJSON解析器fastjson(阿里巴巴出品,版本1.1.26),如果定义了JSONObject为{"JACKIE_ZHANG":"张学友","ANDY_LAU":"刘德华","LIMING":"黎明","Aaron_Kwok":"郭富城"},那么读取值时,KEY顺序无序,测试代码:import com.alibaba.fastjso原创 2014-04-22 13:55:12 · 32248 阅读 · 0 评论 -
11. sharding-jdbc集成--基于ssm
阿飞Javaer,转载请注明原创出处,谢谢!本篇文章讲解如何在ssm(spring、springmvc、mybatis)架构的程序上集成sharding-jdbc(版本为1.5.4.1)进行分库分表; 假设分库分表行为如下: - 将auth_user表分到4个库(user_0~user_3)中; - 其他表不进行分库分表,保留在default_db库中;1. POM配置以...原创 2018-05-09 12:01:22 · 1489 阅读 · 0 评论 -
12. sharding-jdbc源码之强制路由
阿飞Javaer,转载请注明原创出处,谢谢!!源码分析位于sharding-jdbc-core模块下的包com.dangdang.ddframe.rdb.sharding.hint中,核心类HintManagerHolder的部分源码如下:/** * Hint manager holder. * &lt;p&gt;Use thread-local to manage...原创 2018-05-10 09:16:36 · 6668 阅读 · 0 评论 -
0. sharding-jdbc源码之分析准备工作
阿飞Javaer,转载请注明原创出处,谢谢!为什么阅读sharding-jdbc源码回答这个问题之前,先回答为什么要阅读某个分库分表中间件的源码,互联网行业海量的数据,导致单库单表远不能承受业务需求,很多互联网产品的单日订单量就已经突破了1000w。海量数据既然单表无法承受,那么就必须要分库分表;目前主流数据库主要基于Proxy和client两种架构:proxy以阿里的corb...原创 2018-05-04 10:38:26 · 1605 阅读 · 2 评论 -
1. sharding-jdbc源码之数据源
阿飞Javaer,转载请注明原创出处,谢谢!以com.dangdang.ddframe.rdb.sharding.example.jdbc.Main剖析分库分表配置与实现,其部分源码如下:public final class Main { public static void main(final String[] args) throws SQLException {...原创 2018-05-04 16:25:52 · 1957 阅读 · 3 评论 -
2. sharding-jdbc源码之Configuration
阿飞Javaer,转载请注明原创出处,谢谢!上篇文章sharding-jdbc源码之数据源介绍了通过Java硬编码创建ShardingDataSource。这篇文章通过分析sharding-jdbc-config-parent模块,学习如何通过YAML配置或者spring配置创建ShardingDataSource;sharding-jdbc-config-parent模块包含了三个子...原创 2018-05-04 16:38:34 · 1579 阅读 · 1 评论 -
dubbo源码分析--预热warmup过程
阿飞Javaer,转载请注明原创出处,谢谢!前言今天群里小伙伴黄晓峰VIVO咨询一个问题:”dubbo接口怎么做预热呢,每次上线,都会有一小部分超时?”,熟悉JVM都知道,JVM重启后有一段预热过程,要运行一段时间,它的性能才能达到最佳状态;阿里JVM团队就针对这个缺陷进行了优化,其特性名曰:jwarmup,可以点击Alibaba JVM创新提效 获国际社区认可登台JVM圈顶会...原创 2018-05-18 09:34:43 · 3932 阅读 · 0 评论 -
13. sharding-jdbc源码之读写分离
阿飞Javaer,转载请注明原创出处,谢谢!读写分离支持项提供了一主多从的读写分离配置,可独立使用,也可配合分库分表使用。同一线程且同一数据库连接内,如有写入操作,以后的读操作均从主库读取,用于保证数据一致性。Spring命名空间。基于Hint的强制主库路由。读写分离不支持范围 主库和从库的数据同步。主库和从库的数据同步延迟导致的数据不一致。主库双写...原创 2018-05-12 11:12:45 · 1319 阅读 · 0 评论 -
3. sharding-jdbc源码之路由&执行
阿飞Javaer,转载请注明原创出处,谢谢!继续以sharding-jdbc-example-jdbc模块中的com.dangdang.ddframe.rdb.sharding.example.jdbc.Main为基础,剖析分库分表简单查询SQL实现–printSimpleSelect(dataSource);,即如何执行简单的查询SQL,接下来的分析以执行SQL语句"SELECT o...原创 2018-05-07 10:02:59 · 1027 阅读 · 1 评论 -
14. sharding-jdbc源码之异常处理
阿飞Javaer,转载请注明原创出处,谢谢!一般项目都会有自己的一套异常处理方式,sharding-jdbc也不以外,sharding-jdbc源码处理异常的方式主要有下面2种方式: 1. Preconditions 2. 自定义异常1. Preconditionsgoogle-guava的Preconditions用于条件检查,不符合预期的话则抛出异常,并可以重写异常...原创 2018-05-14 09:18:16 · 4044 阅读 · 0 评论 -
剖析G1(Garbage First)
欢迎关注笔者的公众号:【阿飞的博客】,首发都在这里!!!Java从JDK7U9开始支持G1(正式发布),所以,如果要使用G1的话,你的Java版本应该是JDK7U9或者更新的版本。不过,强烈建议JDK8才使用G1,而且最好是JDK8的最新版本,因为在JDK7~JDK8最新版本迭代过程中,Java针对G1垃圾回收期做了大量的优化工作。G1垃圾回收器是为多处理器和大内存的服务器而设计的,它根据...原创 2019-04-20 08:17:47 · 1463 阅读 · 0 评论