![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据库
文章平均质量分 88
阿飞的博客
奋斗不息,前进不止!!
展开
-
ORA-12505错误解决措施
java.sql.SQLException: Listener refused the connection with the following error:ORA-12505, TNS:listener does not currently know of SID given in connect descriptorThe Connection descriptor used by原创 2012-12-27 10:35:39 · 2336 阅读 · 0 评论 -
9. sharding-jdbc源码之最大努力型事务
阿飞Javaer,转载请注明原创出处,谢谢!BASE TransactionBest efforts delivery transaction (已经实现).Try confirm cancel transaction (待定). Sharding-JDBC由于性能方面的考量,决定不支持强一致性分布式事务。最大努力送达型事务在分布式数据库的场景下,相...原创 2018-05-08 11:47:22 · 1312 阅读 · 2 评论 -
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 · 1127 阅读 · 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 · 1310 阅读 · 0 评论 -
6. sharding-jdbc源码之group by结果合并(1)
阿飞Javaer,转载请注明原创出处,谢谢!在5. sharding-jdbc源码之结果合并中已经分析了OrderByStreamResultSetMerger、LimitDecoratorResultSetMerger、IteratorStreamResultSetMerger,查看源码目录下ResultSetMerger的实现类,只剩下GroupByMemoryResultSetM...原创 2018-05-08 11:44:25 · 1530 阅读 · 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 · 772 阅读 · 0 评论 -
4. sharding-jdbc源码之分布式ID
阿飞Javaer,转载请注明原创出处,谢谢!实现动机传统数据库软件开发中,主键自动生成技术是基本需求。而各大数据库对于该需求也提供了相应的支持,比如MySQL的自增键。 对于MySQL而言,分库分表之后,不同表生成全局唯一的Id是非常棘手的问题。因为同一个逻辑表内的不同实际表之间的自增键是无法互相感知的, 这样会造成重复Id的生成。我们当然可以通过约束表生成键的规则来达到数据的不重...原创 2018-05-08 11:31:17 · 2613 阅读 · 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 · 1039 阅读 · 0 评论 -
14. sharding-jdbc源码之异常处理
阿飞Javaer,转载请注明原创出处,谢谢!一般项目都会有自己的一套异常处理方式,sharding-jdbc也不以外,sharding-jdbc源码处理异常的方式主要有下面2种方式: 1. Preconditions 2. 自定义异常1. Preconditionsgoogle-guava的Preconditions用于条件检查,不符合预期的话则抛出异常,并可以重写异常...原创 2018-05-14 09:18:16 · 4024 阅读 · 0 评论 -
10. sharding-jdbc源码之异步送达JOB
阿飞Javaer,转载请注明原创出处,谢谢!最大努力送达型异步JOB任务当最大努力送达型监听器多次失败尝试后,把任务交给最大努力送达型异步JOB任务处理,异步多次尝试处理;核心源码在模块sharding-jdbc-transaction-async-job中。该模块是一个独立异步处理模块,使用者决定是否需要启用,源码比较少,大概看一下源码结构: resouces目录...原创 2018-05-08 11:47:52 · 339 阅读 · 0 评论 -
18. sharding-jdbc源码之复杂路由实现
阿飞Javaer,转载请注明原创出处,谢谢!!路由条件ParsingSQLRouter.java中决定是简单路由还是复杂路由的条件如下;private RoutingResult route(final List<Object> parameters, final SQLStatement sqlStatement) { Collection<...原创 2018-05-25 17:52:47 · 727 阅读 · 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 · 2587 阅读 · 0 评论 -
24. sharding-jdbc源码之orchestration实现
阿飞Javaer,转载请注明原创出处,谢谢!源码图解根据源码图解可知,sharding-jdbc-orchestration模块中创建数据源有两种方式:工厂类和spring;且有两种数据源类型:OrchestrationShardingDataSource和OrchestrationMasterSlaveDataSource; - 左边是OrchestrationShar...原创 2018-06-07 20:44:56 · 1203 阅读 · 1 评论 -
21.sharding-jdbc源码之SQL解析-词法分析
阿飞Javaer,转载请注明原创出处,谢谢!!sharding-jdbc对SQL解析的源码主要在下图所示parsing模块中,由下图可知SQL解析主要分为两部分:lexer和parser。lexer就是本文需要分析的词法分析: 分析sharding-jdbc源码的词法分析之前,先大概说一下词法分析是干嘛的,后面理解起来就会更容易,例如对于SQL:“/! hello, afei /...原创 2018-05-30 21:01:57 · 1122 阅读 · 0 评论 -
23. sharding-jdbc源码之orchestration简介&使用
阿飞Javaer,转载请注明原创出处,谢谢!sharding-jdbc2.x核心功能之一就是orchestration,即编排治理,什么意思呢?官方文档介绍–2.0.0.M1版本开始,sharding-jdbc提供了数据库治理功能,主要包括: - 配置集中化与动态化。可支持数据源、表与分片及读写分离策略的动态切换; - 数据治理。提供熔断数据库访问程序对数据库的访问和禁用从库的访问...原创 2018-06-05 13:42:18 · 3927 阅读 · 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 · 1810 阅读 · 4 评论 -
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 · 2985 阅读 · 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 · 393 阅读 · 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 · 705 阅读 · 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 · 1012 阅读 · 1 评论 -
13. sharding-jdbc源码之读写分离
阿飞Javaer,转载请注明原创出处,谢谢!读写分离支持项提供了一主多从的读写分离配置,可独立使用,也可配合分库分表使用。同一线程且同一数据库连接内,如有写入操作,以后的读操作均从主库读取,用于保证数据一致性。Spring命名空间。基于Hint的强制主库路由。读写分离不支持范围 主库和从库的数据同步。主库和从库的数据同步延迟导致的数据不一致。主库双写...原创 2018-05-12 11:12:45 · 1304 阅读 · 0 评论 -
Oracle中的NUMBER、FLOAT
Number类型:Oracle number datatype 语法:NUMBER[(precision [, scale])]有效位:从左边第一个不为0的数算起的位数。scale > 0 精确到小数点右边s位,并四舍五入。然后检验有效位是否 scale 精确到小数点左边s位,并四舍五入。然后检验有效位是否 scale = 0 NUMBER表示整数。转载 2013-04-10 15:06:19 · 14398 阅读 · 0 评论 -
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 · 1562 阅读 · 1 评论 -
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 · 1926 阅读 · 3 评论 -
0. sharding-jdbc源码之分析准备工作
阿飞Javaer,转载请注明原创出处,谢谢!为什么阅读sharding-jdbc源码回答这个问题之前,先回答为什么要阅读某个分库分表中间件的源码,互联网行业海量的数据,导致单库单表远不能承受业务需求,很多互联网产品的单日订单量就已经突破了1000w。海量数据既然单表无法承受,那么就必须要分库分表;目前主流数据库主要基于Proxy和client两种架构:proxy以阿里的corb...原创 2018-05-04 10:38:26 · 1595 阅读 · 2 评论 -
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 · 6596 阅读 · 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 · 1475 阅读 · 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 · 1685 阅读 · 0 评论