读书人

施用 Hibernate Shards 对数据进行切分

发布时间: 2012-10-12 10:17:04 作者: rapoo

使用 Hibernate Shards 对数据进行切分

当一个大型应用试图在一个单一的数据库表增加TB的数据时,性能经常会下降,对所有数据编索引对数据的读写都会很耗时,显然,如果我们根据某种策略将单一的表数据存储到不同的数据库表中,将会大大提高性能,切分将是一个令人振奋的可选方法。

切分分为纵向切分和横向切分,纵向切分就是将数据库表为单元进行切分,不同的数据存储到不同的数据库中,例如:有数据库表A,B,其中A存储在数据库A中,B存储在数据库中。
横向切分,将同一个表的数据进行切分,表中的数据分别存储到不同的数据库中,例如:同一个数据库表,亚洲的数据存储在数据库A中,其它洲的存储在数据库B中。

hibernate Shards 就是一个让应用横向切分的分布式数据库解决方案,它可以让一个 Hibernate应用很简单的加入横向切分功能,以下是我在通过参考一些文摘后应用JAVA写的一个测试例子,本例子就以存储 天气预报 信息来进行,我们将要做的是将天气预报信息按洲的方式存储到对应的数据库,来达到性能的提升。

在继续本例程开始之前你需要下载:
Hibernate3.2 应用开发包:http://sourceforge.net/projects/hibernate/files/hibernate3/
Hibernate3.0 Shards 应用开发包:http://sourceforge.net/projects/hibernate/files/hibernate-shards/
Spring2.5 应用开发包:http://www.springsource.org/download

开发包准备好后我们按以下过程来开始Hibernate Shards 旅程:
1、创建数据库与数据库表:
在本示例我将使用SQL SERVER 200 来做测试

?

持久对象:WeatherReport.java

?
通过以上测试我们发现,当 Continent 为 ASIA 数据插入到了 ASIA 数据库中,当Continent 为 AFRICA 数据插入到了AFRICA数据库中,同时我们在查询的时候可以查询所有的数

据,查询所有的数据在这里不建议使用,我在这里提供了findByContinent按洲查询,这样就只会读取相关洲的数据库,而避免了在读取相应洲的数据时排描所有洲的数据,增加了

应用程序的读写效率,这样对于一个大型应中,数据量大的应用是一个非常适用的一个选择。
但使用切分不足的时一定要确定应用程序的规模和数据增长量,对于一般中小型应用不建议使用横向切分,因为横向切分会带来应用的开发成本和资源成本,当应用需要改变会增加维护成本,并且需要设定应用的存储和检索的特定逻辑

?

需要有朋友可以下载本例程的实例代码,由于上传文件大小有限制,所以本人只上传了相应的源代码,相应的开发工具包需要读者自身下载并导入。本例程的代码本人都经过测试并成功运行,如有问题可加:63267818 群进行讨论


本例程参考文摘:
Hibernate Shards:http://docs.jboss.org/hibernate/shards/3.0/reference/en/html_single/
Hibernate Shards API Documentation
http://docs.jboss.org/hibernate/stable/shards/api/

http://www.cnblogs.com/RicCC/archive/2010/04/14/hibernate-shards-3-architecture.html

?

?

施用 Hibernate Shards 对数据进行切分

读书人网 >软件架构设计

热点推荐