- 浏览: 48746 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (39)
- jquery (2)
- JAVA (11)
- struts2 (3)
- mysql (7)
- javascript (2)
- xchart (1)
- mybatis (1)
- JAVA,spring (1)
- Spring (2)
- DB (1)
- webService (1)
- javascript,struts1 (1)
- SVN (1)
- My97DatePicker (1)
- linux (5)
- eclipse (1)
- git (1)
- tomcat 8 (1)
- disconf (1)
- maven (1)
- JAVA,elastic-job (1)
- jdk (1)
- JAVA,tomcatDebug (1)
- zookeeper (1)
- redis DB zookeeper (1)
- Java集合 (1)
最新评论
-
Alex-tao:
openFox 写道何不用正则?搞的这么麻烦
写这个简单明了, ...
关于java获取mysql安装路径 -
openFox:
何不用正则?搞的这么麻烦
关于java获取mysql安装路径 -
Alex-tao:
di1984HIT 写道恩,写的不错。谢谢!如有考虑不全的地方 ...
java zip 压缩文件以及整个文件夹目录 -
di1984HIT:
恩,写的不错。
java zip 压缩文件以及整个文件夹目录 -
Alex-tao:
it_freshman 写道要动态获取 picture这个目录 ...
java struts2复制文件到另一个目录下
前言:
在互联网技术开发中 ,大多数都是基于数据库的开发,而随着应用维护的历史,数据量越来越大,
以及业务变得更加复杂,要求更高的响应时间,和更高的计算能力,单台服务器,单表单库的方式存在着比较大的瓶颈。通过加机器,提升硬件的方式成本越来越高。
随着数据量和访问量的增长,业内已经有各种方式的解决方案,对数据进行水平和垂直方面的切分。
根据以往分库分表的一些经验,特意写了这套框架,实现对分库分表的透明性,降低开发难度和复杂 度,提高对分库分表的监控调试和方便维护。
分库分表方面上最主要关注的是如何切分,根据哪些字段进行切分的,这个需要具体的业务使用场景进行分析。
根据以往使用的经验来看:
1. 按照哈希的方式
优点:数据散列比较平均,单库单表访问压力分布比较均匀
缺点:预先需要做好容量规划,扩容方面不容易,需要重新进行数据hash迁移
适用场景:数据变更频繁,并发访问量比较高的情况下,可以利用多台机器将访问压力均匀分布,合理利用资源
2. 按时间段或者按ID段进行划分
优点:可以持续扩容,降低单表压力
缺点:有时候业务数据上,存在着一部分的旧数据,但是这部分数据很少使用到,基于这样的分库分表的方式,不能充分的利用好系统资源。
使用场景:数据归档或者备份,或者数据不存在短期内国企的情况下的场景。
更多的请大家补充................
以上的功能,这套框架都能够很好的支持,
一套基于数据库分库分表的解决方案,当前版本仅支持mybatis,设计上往后可以支持Jdbc方面的扩展,开发的目的是方便在日常开发中对分库分表透明,使用上管理方便,简化开发难度。
目前具有的分库分表功能包括:
1.分库分表路由(目前完成水平切分功能,后续提供垂直切分支持)
2.读写分离
3.跨库跨表事务支持(特殊场景下可以使用,尽量避免使用)
4.查询结果合并
5.分库表直接查询
后续会支持以下功能:
1.对多个库读写的负载均衡
2.failover
3.提供垂直切分功能
4.流量统计功能
5.性能监控功能
6.配置集成管理功能
7.数据复制同步
......
与Spring集成:
<bean id="sqlSessionFactory"
class="com.opensource.mybatis.spring.ShardingSqlSessionFactoryBean">
<property name="typeAliasesPackage" value="com.opensource.mybatis.sharding" />
<property name="dataSource" ref="dataSource1" />
<property name="plugins" ref="plugins" />
<property name="shardingConfigLocation" value="classpath*:sharding.xml" />
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.opensource.mybatis.sharding" />
</bean>
分库分表配置
<?xml version="1.0" encoding="UTF-8"?>
<configurations>
<datasource id="springconfig" ref="springdatasource-config" />
<generator id="customGenerator" class="com.test.CustomGenerator" />
<datasource id="parent" abstract="true">
<url>jdbc:mysql://localhost:3306/sharding?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
</url>
<username>root</username>
<password>root</password>
<minIdle>5</minIdle>
<maxIdle>5</maxIdle>
<initialSize>5</initialSize>
<maxWait>30000</maxWait>
<maxActive>128</maxActive>
<testOnBorrow>true</testOnBorrow>
<testWhileIdle>true</testWhileIdle>
<validationQuery>select 1</validationQuery>
<driverClassName>com.mysql.jdbc.Driver</driverClassName>
</datasource>
<datasource id="master1" parent="parent">
<url>jdbc:mysql://localhost:3306/sharding?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
</url>
</datasource>
<datasource id="slave1" parent="parent">
<url>jdbc:mysql://localhost:3306/sharding?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
</url>
</datasource>
<datasource id="master2" parent="parent">
<url>jdbc:mysql://localhost:3306/sharding2?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
</url>
</datasource>
<datasource id="slave2" parent="parent">
<url>jdbc:mysql://localhost:3306/sharding?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
</url>
</datasource>
<datasource id="master3" parent="parent">
<url>jdbc:mysql://localhost:3306/sharding?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
</url>
</datasource>
<datasource id="slave3" parent="parent">
<url>jdbc:mysql://localhost:3306/sharding?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
</url>
</datasource>
<datasource id="slave4" parent="parent">
<url>jdbc:mysql://localhost:3306/sharding?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
</url>
</datasource>
<group id="trade">
<table name="user_copy" length="16">
<database-config>
<database masters="master1" slaves="slave1">
<tables range="1-8" />
</database>
<database masters="master2" slaves="slave2,slave3">
<tables range="9-16" />
</database>
</database-config>
<hashcolumns generator="default">
<column>id</column>
<script></script>
</hashcolumns>
</table>
<table name="sample_table" length="16"><!-- <names> <name>table1</name>
<name>table2</name> <value>table3,table4,table5,table6,table7,table8,table9,table10</value>
</names> -->
<database-config>
<database masters="master1" slaves="slave1">
<tables range="1-8" />
</database>
<database masters="master2" slaves="slave2,slave3"
readwrite="true">
<tables>
<names>
<name>table1</name>
<name>table2</name>
<value>table3,table4,table5,table6</value>
</names>
</tables>
</database>
<database masters="master3" slaves="slave3:80,slave4:10"
readwrite="true">
<tables>
<names>
<name>table1</name>
<name>table2</name>
<value>table3,table4,table5,table6</value>
</names>
</tables>
</database>
</database-config>
<hashcolumns generator="default">
<column>member_id</column>
<script></script>
</hashcolumns>
</table>
</group>
<group id="member">
</group>
<group id="market">
</group>
</configurations>
在互联网技术开发中 ,大多数都是基于数据库的开发,而随着应用维护的历史,数据量越来越大,
以及业务变得更加复杂,要求更高的响应时间,和更高的计算能力,单台服务器,单表单库的方式存在着比较大的瓶颈。通过加机器,提升硬件的方式成本越来越高。
随着数据量和访问量的增长,业内已经有各种方式的解决方案,对数据进行水平和垂直方面的切分。
根据以往分库分表的一些经验,特意写了这套框架,实现对分库分表的透明性,降低开发难度和复杂 度,提高对分库分表的监控调试和方便维护。
分库分表方面上最主要关注的是如何切分,根据哪些字段进行切分的,这个需要具体的业务使用场景进行分析。
根据以往使用的经验来看:
1. 按照哈希的方式
优点:数据散列比较平均,单库单表访问压力分布比较均匀
缺点:预先需要做好容量规划,扩容方面不容易,需要重新进行数据hash迁移
适用场景:数据变更频繁,并发访问量比较高的情况下,可以利用多台机器将访问压力均匀分布,合理利用资源
2. 按时间段或者按ID段进行划分
优点:可以持续扩容,降低单表压力
缺点:有时候业务数据上,存在着一部分的旧数据,但是这部分数据很少使用到,基于这样的分库分表的方式,不能充分的利用好系统资源。
使用场景:数据归档或者备份,或者数据不存在短期内国企的情况下的场景。
更多的请大家补充................
以上的功能,这套框架都能够很好的支持,
一套基于数据库分库分表的解决方案,当前版本仅支持mybatis,设计上往后可以支持Jdbc方面的扩展,开发的目的是方便在日常开发中对分库分表透明,使用上管理方便,简化开发难度。
目前具有的分库分表功能包括:
1.分库分表路由(目前完成水平切分功能,后续提供垂直切分支持)
2.读写分离
3.跨库跨表事务支持(特殊场景下可以使用,尽量避免使用)
4.查询结果合并
5.分库表直接查询
后续会支持以下功能:
1.对多个库读写的负载均衡
2.failover
3.提供垂直切分功能
4.流量统计功能
5.性能监控功能
6.配置集成管理功能
7.数据复制同步
......
与Spring集成:
<bean id="sqlSessionFactory"
class="com.opensource.mybatis.spring.ShardingSqlSessionFactoryBean">
<property name="typeAliasesPackage" value="com.opensource.mybatis.sharding" />
<property name="dataSource" ref="dataSource1" />
<property name="plugins" ref="plugins" />
<property name="shardingConfigLocation" value="classpath*:sharding.xml" />
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.opensource.mybatis.sharding" />
</bean>
分库分表配置
<?xml version="1.0" encoding="UTF-8"?>
<configurations>
<datasource id="springconfig" ref="springdatasource-config" />
<generator id="customGenerator" class="com.test.CustomGenerator" />
<datasource id="parent" abstract="true">
<url>jdbc:mysql://localhost:3306/sharding?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
</url>
<username>root</username>
<password>root</password>
<minIdle>5</minIdle>
<maxIdle>5</maxIdle>
<initialSize>5</initialSize>
<maxWait>30000</maxWait>
<maxActive>128</maxActive>
<testOnBorrow>true</testOnBorrow>
<testWhileIdle>true</testWhileIdle>
<validationQuery>select 1</validationQuery>
<driverClassName>com.mysql.jdbc.Driver</driverClassName>
</datasource>
<datasource id="master1" parent="parent">
<url>jdbc:mysql://localhost:3306/sharding?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
</url>
</datasource>
<datasource id="slave1" parent="parent">
<url>jdbc:mysql://localhost:3306/sharding?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
</url>
</datasource>
<datasource id="master2" parent="parent">
<url>jdbc:mysql://localhost:3306/sharding2?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
</url>
</datasource>
<datasource id="slave2" parent="parent">
<url>jdbc:mysql://localhost:3306/sharding?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
</url>
</datasource>
<datasource id="master3" parent="parent">
<url>jdbc:mysql://localhost:3306/sharding?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
</url>
</datasource>
<datasource id="slave3" parent="parent">
<url>jdbc:mysql://localhost:3306/sharding?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
</url>
</datasource>
<datasource id="slave4" parent="parent">
<url>jdbc:mysql://localhost:3306/sharding?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
</url>
</datasource>
<group id="trade">
<table name="user_copy" length="16">
<database-config>
<database masters="master1" slaves="slave1">
<tables range="1-8" />
</database>
<database masters="master2" slaves="slave2,slave3">
<tables range="9-16" />
</database>
</database-config>
<hashcolumns generator="default">
<column>id</column>
<script></script>
</hashcolumns>
</table>
<table name="sample_table" length="16"><!-- <names> <name>table1</name>
<name>table2</name> <value>table3,table4,table5,table6,table7,table8,table9,table10</value>
</names> -->
<database-config>
<database masters="master1" slaves="slave1">
<tables range="1-8" />
</database>
<database masters="master2" slaves="slave2,slave3"
readwrite="true">
<tables>
<names>
<name>table1</name>
<name>table2</name>
<value>table3,table4,table5,table6</value>
</names>
</tables>
</database>
<database masters="master3" slaves="slave3:80,slave4:10"
readwrite="true">
<tables>
<names>
<name>table1</name>
<name>table2</name>
<value>table3,table4,table5,table6</value>
</names>
</tables>
</database>
</database-config>
<hashcolumns generator="default">
<column>member_id</column>
<script></script>
</hashcolumns>
</table>
</group>
<group id="member">
</group>
<group id="market">
</group>
</configurations>
发表评论
-
mysql 不等于 过滤null值
2019-09-21 11:34 478MySql 语句判断不等于某值的时候,查询出来的数据会过滤掉 ... -
centos 下yum安装jdk
2018-10-08 15:28 7251:先要查看本机的jdk:rpm -qa|grep java ... -
Linux centos6.5 下装mysql 5.7版本 rpm方式
2017-04-05 14:16 2566这里更新下MySQL 5.7版本在Linux centos ... -
centos6.5 下安装mysql5.6,rpm方式
2016-11-22 14:49 760安装环境: linux版本:centost6.5 m ... -
关于mysql数据删除后空间未释放
2015-12-03 16:00 1551有很多人在做mysql数据库的时候,当数据删除的时候,以为空 ... -
JAVA事务
2013-04-21 23:37 781Java中使用事务处理, ... -
关于struts1和struts2的区别
2013-04-10 00:00 9171) 在Action实现类方面的对比:Struts 1要求Ac ... -
关于java获取mysql安装路径
2013-03-21 16:06 2447/** * 获取mysql安装路径 * @return ... -
java javascript 中实现xchart插件(图形,图表等)
2013-02-27 14:06 1612HTML 页面 首先要引入以下的几个JS文件 http://s ... -
java 中关于备份和还原mysql数据库
2013-02-27 13:55 1333-----------------------------备份 ... -
java zip 压缩文件以及整个文件夹目录
2013-02-27 13:43 2522public static final Stri ... -
12个用于播放音乐和视频文件的jQuery插件
2013-02-19 10:32 0也许有时你需要在网站 ... -
jQuery:收集一些基于jQuery框架开发的控件/jquery插件
2013-02-19 09:51 1162Coda Popup Bubbles 采用jQuery开发,类 ... -
java操作文件,目录
2013-01-25 16:17 754** * 输出目录中的所有文件及目录名字 * @param ... -
java struts2复制文件到另一个目录下
2013-01-25 15:50 1595这里主要是获取路径下的文件,通过过去此文件的文件名称,然后到目 ...
相关推荐
- 使用集合框架(如 `List` 和 `Map`)来存储拆分后的单据和明细项。 - 采用循环结构和条件判断来实现明细项的拆分逻辑。 6. **异常处理**: - 对于可能出现的异常情况,如数据类型不匹配、除数为零等,应提前...
文件拆分和合并在很多场景下都有用武之地,比如: - 分割大型日志文件,便于分析或上传。 - 在分布式系统中,大文件可以被分割成多个部分,由不同的节点并行处理,提高效率。 - 数据备份,将大文件拆分成多个小文件...
`jxl.jar`库允许开发者读取、写入和修改Excel文件,包括对单元格的操作,如拆分和合并。在描述中提到的“自动拆分合并的单元格并补充拆分后的值”,意味着我们需要对Excel中的合并单元格进行处理,将它们拆分为多个...
Java文件的拆分是指将一个大的Java文件分割成多个小的文件,以便于更好地管理和维护。在上述代码中,我们可以看到,作者使用了Java的文件操作类库来实现文件的拆分。首先,作者定义了一个SeparatorByLine类,该类...
总的来说,Map拆分和List拆分是大数据处理中的重要技巧,它们有助于优化数据处理的并行性和效率。通过合理地拆分数据,可以充分利用分布式系统的计算资源,加快处理速度,同时降低单个节点的压力,从而在大数据挑战...
短信拆分规则JAVA代码 拆分规则如下: 1、不超过70字按照一条短信计费 2、超过70字即为长短信,按67字/条分隔成多条计费
### JAVA拆分窗口与卡片布局相结合的经典案例 #### 案例概述 本案例通过将卡片布局(CardLayout)与拆分窗口(JSplitPane)结合使用,实现了一个动态切换界面的效果。左侧为操作区域,放置了按钮;右侧为展示区域,采用...
在本文中,我们将深入探讨...这个例子展示了如何利用Java实现双向链表的高效拆分,对于理解和操作链表数据结构非常有帮助。通过这种方式,我们可以解决许多其他涉及链表操作的算法问题,例如合并排序链表或链表的反转。
总的来说,"IPV4大网段拆分为多个均分子网段"是一个涉及网络地址规划和Java编程的问题。理解子网划分的概念和计算方法,以及如何在Java中实现这些计算,对于任何IT专业人士,尤其是网络管理员和软件开发者来说,都是...
按行把一个txt文件平均拆分成N个txt文件,结果是一行文本组成一个txt文件,适用于语料的按行切分。
单体应用已经不符合发展趋势,面对新的业务需求,把业务拆分,系统拆分,加深理解服务的概念,一切皆对象,一切皆服务,SDO(service data object) 一切皆数据
在面对大量数据时,为了提高系统性能,我们常常需要采用一些数据库优化策略,如垂直拆分、水平拆分和读写分离。这里我们将详细讨论如何基于MyBatis框架实现这些策略,并结合Spring进行整合。 **一、MyBatis框架** ...
### Java实现文件拆分与合并 #### 一、文件拆分 ...综上所述,《Java实现文件拆分与合并》提供了详细的Java代码实现,不仅有助于理解和掌握文件拆分与合并的基本原理,还可以应用于实际项目中解决实际问题。
对于一些长文档,特别是包含多个章节或部分的大篇幅文档,有时我们需要将其拆分为更小的部分,方便管理和处理。Word提供了简单易用的拆分功能。 ##### 步骤一:切换到大纲视图 - **视图选项**:首先,点击“视图”...
在Java编程中,日期处理是一项常见的任务,包括日期的拆分、比较、格式化和计算等。本篇文章将深入探讨如何使用Java实现日期拆分,特别是通过日期类和日历类来实现对日期字符串的拆分功能。 首先,Java中的日期类...
根据提供的文件信息,我们可以深入探讨如何使用iText库在Java环境中进行PDF文件的合并与拆分操作。以下是对这些操作的详细解释。 ### iText简介 iText 是一个开源库,用于生成、修改以及处理PDF文件。它支持多种...
创建一个字符串“HelloWorld!!!”,将这个字符串拆分并转换成集合的方法。 自己也可以修改成汉字string类型。
Java动态规划-单词拆分 Java动态规划是指使用动态规划算法来解决问题的编程技术。动态规划是一种算法设计方法,它将问题分解成更小的子问题,并利用这些子问题的解来解决原问题。动态规划算法通常用于解决具有最...
1、起始IP-终止IP进行拆分、计算,如192.168.1.1-192.168.1.254; 2、输入IP地址段进行拆分、计算,如192.168.1.0/24、192.168.1-255(v1.1版本新增模式); 3、可以根据excel文件进行拆分,excel文件中IP地址,支持...