Java开辟2.0: 操纵Hibernate Shards举行切分[Java编程]
本文“Java开辟2.0: 操纵Hibernate Shards举行切分[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
当关系数据库试图在一个单一表中存储数 TB 的数据时,总性能常常会降低.明显,对全部数据编索引不但关于读并且关于写都很耗时.因为 NoSQL 数据商店特别合适存储大型数据(如 Google 的 Bigtable),明显 NoSQL 是一种非关系数据库办法.关于偏向于利用 ACID-ity 和实体构造关系数据库的开辟人员及需求这种构造的项目来说,切分是一个令人振奋的可选办法.
切分 是数据库分区的一个分支,但是它不是本地数据库技术 — 切分发生在利用程序级别.在各种切分实现中,Hibernate Shards 是 Java™ 技术世界中最受欢送的一个.这个机动绝妙的项目可以让您利用映射至逻辑数据库的 POJO 对切分数据集举行几近无缝操作(我将在下文扼要介绍 “几近” 的缘由).利用 Hibernate Shards 时,您无须将您的 POJO 分外映射至切分 — 您可以像利用 Hibernate 办法对任何常见关系数据库举行映射时一样对其举行映射.Hibernate Shards 可认为您管理初级别的切分任务.
到目前为止,在本 系列 中,我已经利用了一个基于比赛和参赛者类推关系的简单域展示了各种数据库存储技术.本月,我将持续利用这个熟习的示例介绍一种实用的切分技术,然后在 Hibernate Shards 中对其举行实现.注意:与切分相关的主要工作与 Hibernate 没有太大关系;事实上,Hibernate Shards 的编码工作对比简单.此中关键的部份在于判断 若何举行切分以及对什么举行切分.
关于本系列
自 Java 技术初次诞生以来,Java 开辟格局已发生了翻江倒海的改变.得益于成熟的开源框架和坚固的租赁布置底子设备,目前可以疾速而经济地组装、测试、运行和保护 Java 利用程序.在 本系列 中,Andrew Glover 摸索使这种新的 Java 开辟气势成为大概的各种技术和工具.
切分简介
数据库切分 是一个固有的关系流程,可以通过一些逻辑数据块将一个表的行分为差别的小组.比方,假如您正在按照时间戳对一个名为 foo 的超大型表举行分区,2010 年 8 月之前的全部数据都将进入分区 A,而之后的数据则全部进入分区 B.分区可以加快读写速度,因为它们的目标是单独分区中的较小型数据集.
分区功效并不老是可用的(MySQL 直到 5.1 版本后才支持),并且其需求的商业系统的本钱也让人望而却步.更重要的是,大部份分区实目前同一个物理机上存储数据,所以遭到硬件底子的影响.除此之外,分区也不能辨别硬件的坚固性大概说贫乏坚固性.因此,很多智慧的人们开始探求举行伸缩的新办法.
切分 实质上是数据库级别的分区:它不是通过数据块分割数据表的行,而是通过一些逻辑数据元素对数据库本身举行分割(普通跨差别的计算机).也就是说,切分不是将数据表 分割成小块,而是将整个数据库 分割成小块.
切分的一个典型示例是基于按照区域对一个存储世界范围客户数据的大型数据库举行分割:切分 A 用于存储美国的客户信息,切分 B 用户存储亚洲的客户信息,切分 C 欧洲,等.这些切分辨别处于差别的计算机上,且每个切分将存储全部相关数据,如客户爱好或订购历史.
切分的好处(如分区一样)在于它可以压缩大型数据:单独的数据表在每个切分中相对较小,这样便可以支持更快速的读写速度,从而提高性能.切分还可以改进坚固性,因为即便一个切分不测失效,其他切分仍旧可以服务数据.并且因为切分是在利用程序层面举行的,您可以对不支持通例分区的数据库举行切分处理.资金本钱较低一样也是一个潜在上风.
切分和战略
像很多其他技术一样,举行切分时也需求作出部份让步.因为切分不是一项本地数据库技术 — 也就是说,必须在利用程序中实现 —在开始切分之前需求拟定出您的切分战略.举行切分时主键和跨切分查询都扮演重要角色,主要通过定义您不可以做什么实现.
主键
切分操纵多个数据库,此中全部数据库都独立起作用,不干与其他切分.因此,假如您依靠于数据库序列(如自动主键生成),很有大概在一个数据库集合将呈现同一个主键.可以跨分布式数据库调和序列,但是这样会增添系统的复杂程度.避免相同主键最安全的办法就是让利用程序(利用程序将管理切分系统)生成主键.
跨切分查询
大部份切分实现(包含 Hibernate Shards)不支持跨切分查询,这就意味着,假如您想操纵差别切分的两个数据集,就必须处理额外的长度.(风趣的是,Amazon 的 SimpleDB 也禁止跨域查询)比方,假如将美国客户信息存储在切分 1 中,还需求将全部相关数据存储在此.假如您尝试将那些数据存储在切分 2 中,情形就会变得复杂,系统性能也大概受影响.这种情形还与之前提到的一点有关 — 假如您因为某种缘由需求举行跨切分衔接,最好采取一种可以消除反复的方法管理键!
很明显,在成立数据库前必须全面考虑切分战略.一旦挑选了一个特定的方向之后,您差不多就被它绑定了 — 举行切分后很难随便移动数据了.
避免不成熟切分
切分最好在后期实现.如不成熟优化一样,基于预期数据增长的切分大概是灾难的温床.成功的切分实现基于关于利用程序数据随时间增长的理解,以及之后关于将来的推断.一旦对数据举行切分后,移动数据会非常艰难.
以上是“Java开辟2.0: 操纵Hibernate Shards举行切分[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |