- 博客(22)
- 资源 (2)
- 收藏
- 关注
转载 数据库分库分表(sharding)系列(五) 一种支持自由规划无须数据迁移和修改路由代码的Sharding扩容方案
作为一种数据存储层面上的水平伸缩解决方案,数据库Sharding技术由来已久,很多海量数据系统在其发展演进的历程中都曾经历过分库分表的Sharding改造阶段。简单地说,Sharding就是将原来单一数据库按照一定的规则进行切分,把数据分散到多台物理机(我们称之为Shard)上存储,从而突破单机限制,使系统能以Scale-Out的方式应对不断上涨的海量数据,但是这种切分对上层应用来说是透明的,多个
2016-08-31 21:12:36 547
转载 数据库分库分表(sharding)系列(四) 多数据源的事务处理
分布式事务这是最为人们所熟知的多数据源事务处理机制。本文并不打算对分布式事务做过多介绍,读者可参考此文:关于分布式事务、两阶段提交、一阶段提交、Best Efforts 1PC模式和事务补偿机制的研究 。在这里只想对分布式事务的利弊作一下分析。优势:1. 基于两阶段提交,最大限度地保证了跨数据库操作的“原子性”,是分布式系统下最严格的事务实现方式。2. 实现简单,工
2016-08-31 21:10:50 425
转载 数据库分库分表(sharding)系列(三) 关于使用框架还是自主开发以及sharding实现层面的考量
一、sharding逻辑的实现层面从一个系统的程序架构层面来看,sharding逻辑可以在DAO层、JDBC API层、介于DAO与JDBC之间的Spring数据访问封装层(各种spring的template)以及介于应用服务器与数据库之间的sharding代理服务器四个层面上实现。图1. Sharding实现层面与相关框架/产品
2016-08-31 21:09:47 644
转载 数据库分库分表(sharding)系列(二) 全局主键生成策略
第一部分:一些常见的主键生成策略一旦数据库被切分到多个物理结点上,我们将不能再依赖数据库自身的主键生成机制。一方面,某个分区数据库自生成的ID无法保证在全局上是唯一的;另一方面,应用程序在插入数据之前需要先获得ID,以便进行SQL路由。目前几种可行的主键生成策略有:1. UUID:使用UUID作主键是最简单的方案,但是缺点也是非常明显的。由于UUID非常的长,除占用大量存储
2016-08-31 21:08:16 427
转载 数据库分库分表(sharding)系列(一) 拆分实施策略和示例演示
第一部分:实施策略图1.数据库分库分表(sharding)实施策略图解(点击查看大图)1.准备阶段对数据库进行分库分表(Sharding化)前,需要开发人员充分了解系统业务逻辑和数据库schema.一个好的建议是绘制一张数据库ER图或领域模型图,以这类图为基础划分shard,直观易行,可以确保开发人员始终保持清醒思路。对于是选择数据库
2016-08-31 21:05:52 430
转载 关于垂直切分Vertical Sharding的粒度
垂直切分的粒度指的是在做垂直切分时允许几级的关联表放在一个shard里.这个问题对应用程序和sharding实现有着很大的影响.关联打断地越多,则受影响的join操作越多,应用程序为此做出的妥协就越大,但单表的路由会越简单,与业务的关联性会越小,就越容易使用统一机制处理.在此方向上的极端方案是:打断所有连接,每张表都配有路由规则,可以使用统一机制或框架自动处理.比如amoeba
2016-08-31 21:03:44 319
转载 数据库Sharding的基本思想和切分策略
本文着重介绍sharding的基本思想和理论上的切分策略一、基本思想 Sharding的基本思想就要把一个数据库切分成多个部分放到不同的数据库(server)上,从而缓解单一数据库的性能问题。不太严格的讲,对于海量数据的数据库,如果是因为表多而数据多,这时候适合使用垂直切分,即把关系紧密(比如同一模块)的表切分出来放在一个server上。如果表并不多,但每张表
2016-08-31 12:43:33 332
原创 MyBatis配置文件标签
MyBatis配置文件标签:1)configuration:根元素2)properties:定义配置外在化3)settings:一些全局性的配置4)typeAliases:为一些类定义别名5)typeHandlers:定义类型处理,也就是定义java类型与数据库中的数据类型之间的转换关系6)objectFactory:用于指定结果集对象的实例是如何创建的7)plugin
2016-08-26 00:04:46 5131
转载 Guava不可变集合
不可变集合,顾名思义就是说集合是不可被修改的。集合的数据项是在创建的时候提供,并且在整个生命周期中都不可改变。为什么要用immutable对象?immutable对象有以下的优点:1.对不可靠的客户代码库来说,它使用安全,可以在未受信任的类库中安全的使用这些对象2.线程安全的:immutable对象在多线程下安全,没有竞态条件3.不需要支持可变性, 可以尽量节省空间和时间的开销
2016-08-24 16:51:30 9174
原创 创建AOP代理步骤
1、获取增强方法或者增强器 1)获取所有的beanName 2)遍历所有的beanName,并找出声明AspectJ注解的类,进行进一步的处理 3)对标记为Aspect注解的类进行增强器的提取 a、获取切点信息 b、根据切点信息生成增强 4)将提取结果加入缓存2、根据获取的增强进行代理 1)获取当前类中的属性
2016-08-24 00:14:58 366
原创 AOP:JDK动态代理 vs CGLIB代理
AOP面向切面编程,其极大的简化了代码的工作量受到了j2ee程序员的一致好评,分为静态代理和动态代理,静态代理主要是在启动时修改被代理类的字节码从而实现代理的效果,这里不做详述,主要分析下AOP动态代理。首先看下AOP两种动态代理的区别:1)JDK动态代理:其代理对象必须是某个接口的实现,它是通过在运行期间创建一个接口的实现类来完成目标对象的代理。2)CGLIB代理:实现原理类似于JD
2016-08-24 00:02:30 623
转载 MyISAM和InnoDB区别
MyISAM InnoDB 构成上的区别: 每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。 .frm文件存储表定义。 数据文件的扩展名为.MYD (MYData)。 索引文件的扩展名是.MYI (MYIndex)。 基于磁盘的资源是InnoDB表空间数据文件和它的
2016-08-23 15:47:27 318
转载 SpringMVC数据验证
对于任何一个应用而言在客户端做的数据有效性验证都不是安全有效的,这时候就要求我们在开发的时候在服务端也对数据的有效性进行验证。SpringMVC自身对数据在服务端的校验有一个比较好的支持,它能将我们提交到服务端的数据按照我们事先的约定进行数据有效性验证,对于不合格的数据信息SpringMVC会把它保存在错误对象中,这些错误信息我们也可以通过SpringMVC提供的标签在前端JSP页面上进行展示。
2016-08-23 10:12:26 1710
转载 关于@responsebody注解的说明
@responsebody表示该方法的返回结果直接写入HTTP response body中@responsebody注解一般在异步获取数据时使用,在springMVC框架时,使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@res
2016-08-19 11:20:15 1307
转载 java自定义注解中元注解的含义
元注解: 元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。Java5.0定义的元注解: 1.@Target, 2.@Retention, 3.@Documented, 4.@Inherited 这些类型和它们所支持的类在java.lang
2016-08-15 10:06:12 935
转载 linux下安装mongodb
安装说明系统环境:Centos-6.3安装软件:mongodb-linux-x86_64-2.2.2.tgz下载地址:http://www.mongodb.org/downloads安装机器:192.168.15.237上传位置:/usr/local/软件安装位置:/usr/local/mongodb数据存放位置:/var/mongodb/data日志存放位置:
2016-08-11 17:13:01 546
转载 linux系统文件名颜色含义
在Linux中,文件的颜色都是有含义的,文件名颜色不同,代表文件类型不一样。 浅蓝色:表示链接文件; 灰色:表示其他文件; 绿色:表示可执行文件; 红色:表示压缩文件; 蓝色:表示目录; 红色闪烁:表示链接的文件有问题了; 黄色:表示设备文件,包括block,char,fif
2016-08-11 17:09:56 12664
转载 java中保留小数位数的方法总结
第一种:java.text.DecimalFormat df=new java.text.DecimalFormat("#.##"); double d=3.14159; System.out.println(df.format(d));第二种:java.math.BigDecimal BigDecimal bd = new BigDecimal("3.14159265
2016-08-08 17:14:17 577
原创 java 组装json对象,并获取json对象中的属性
import com.alibaba.fastjson.JSONObject;public class JSONTest {// 创建JSONObject对象private static JSONObject createJSONObject() {JSONObject jsonObject = new JSONObject();jsonObject.put("
2016-08-03 11:06:37 12503
原创 spring bean属性及子元素使用总结
spring框架中主要有四种标签bean、alias、import、beans,其中bean标签是其他标签的基础,此文主要对bean标签的属性及其子元素进行讨论,废话不多,请往下看。一、bean标签的属性1)scope:用来配置spring bean的作用域2)singleton:表示bean为单例的3)abstract:设置为true,将该bean仅仅作为模板使用,应用程序上下文
2016-08-03 00:00:43 7336 1
转载 服务器从request中解析真实访问IP地址
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了 Apache,Nagix等反向代理软件就不能获取到客户端的真实IP地址了。如果使用了反向代理软件,用 request.getRemoteAddr()方法获取的IP地址是:127.0.0.1或 192.168.1.110,而并不是客户端的真实IP。
2016-08-02 16:18:00 3816 1
jclasslib-猴子哥哥.zip
2020-05-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人