Liferay研究之卅一:DatabaseSharding(数据库分片)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Liferay研究之卅一:DatabaseSharding(数据库分片),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2557字,纯文字阅读大概需要4分钟。
内容图文
![Liferay研究之卅一:DatabaseSharding(数据库分片)](/upload/InfoBanner/zyjiaocheng/564/c241aa25d6364ee0a2af6e92ffecdcc9.jpg)
Database Sharding是什么? 其实就是一种分布式计算,通过业务逻辑将不同的分类的数据保存到不同的数据库(具有相同的表结构)中。简单的说是一种负载均衡技术,因为每个表中的数据少了,查询速度就快了,系统能承受的负载也就大了。很多大公司都在用这种技
Database Sharding是什么?
其实就是一种分布式计算,通过业务逻辑将不同的分类的数据保存到不同的数据库(具有相同的表结构)中。简单的说是一种负载均衡技术,因为每个表中的数据少了,查询速度就快了,系统能承受的负载也就大了。很多大公司都在用这种技术,比如Google, Facebook, Wikipedia等等。
Liferay的实现策略是什么?
Liferay实现的是根据Portal Instance来进行分布的,也就是说,不同的portal instance的数据,保存在不同的数据库中。同一个portal instance的数据,只在一个数据库中。当然,一些全局的数据,比如ClassName,Company, Counter等数据是保存在一个节点(default)上的。
Liferay中的配置方式
1、首先你的系统上要有多个Portal Instances
比如babaodi.com, liushining.cn, smilingleo.cn等
2、安装多个数据库(也可以是一个服务器上的多个实例),可以是异构的,通过create_minimal的sql脚本创建最小数据库。
3、在portal.properties中将shard-data-source-spring.xml的注释去掉。并添加对应的配置内容,比如:
这样,你的系统就可以将不同的portal instance的数据保存到不同的数据库中了。
实现原理
具体的实现Liferay采用了AOP, 在shard-data-source-spring.xml中定义了一个ShardAdvice,
可以看出,所有持久化方法都调用invokePersistence方法,而该方法中负责通过instances % shards的简单hash算法获取一个数据源(被保持在ThreadLocal中)。
替代技术
Database Sharding是与业务相关的分布式数据处理技术,不够通用,而且多个数据源就存在多个单点问题。
一个比较好的通用解决方案是C-JDBC(Sequoia),把硬件RAID的概念演化为软件的Raidb, 即解决了分布式运算的问题,又可以通过RAIDb1的方式解决单点问题。
当然,C-JDBC是一种没钱买“磁盘阵列”的廉价替换方案,如果你已经有了阵列,那么就不需要这个技术了。(选购服务器等基础设施时,就需要考虑好用什么样的软件技术,否则会浪费钱,很多钱。)
内容总结
以上是互联网集市为您收集整理的Liferay研究之卅一:DatabaseSharding(数据库分片)全部内容,希望文章能够帮你解决Liferay研究之卅一:DatabaseSharding(数据库分片)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。