强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan
我们做的高校云平台中需要用多租户这种技术,目录了解到的有三种技术可以实现:符合JPA规范的Hibernate和EclipseLink以及Mybatis+Mycat;我们的上一版本的系统用的是EclipseLink实现的,这版需要重新对比一下,选定一个,于是花了些时间来做了些验证
一、什么是多租户
1、多租户的实现根据在数据库中存储的形式区分,分为三种方式:DATABASE、SCHEMA、DISCRIMINATOR;
(1)DATABASE:一个租户一个单独的数据源,物理上不同的数据库;隔离性最好,数据恢复等也最方便,需要的资源比较多,一个租户分配一个机器;
(2)SCHEMA:多个租户共用一个数据源,每个租户有不同的数据库;在两者之间;
(3)DISCRIMINATOR:多个租户在同一个数据源中的同一个库中用不同的字段区分;隔离性差,影响性能;但是节省资源;
2、关于多租户我们权衡后选用的是SCHEMA这种方式,我画了张图来描述这个概念:
二、符合JPA规范
1、符合JPA规范常用实现
Hibernate、EclipseLink、OpenJPA、TopLink
2、为何将Hibernate和EclipseLink做为备选方案
(1)整体性能上来说Hibernate和EclipseLink更胜一筹(参考:JPA 实现比较:Hibernate、Toplink Essentials、OpenJPA、Eclipselink JPA实现比较:Hibernate、OpenJPA、Eclipselink )
(2)对多租户实现支持来说,两者都有比较成熟的实现方式
(3)Hibernate和EclipseLink团队学习成本相对来说低
3、Hibernate和EclipseLink对比
(1)Hibernate
优点:国内用的人多遇到问题问题解决成本低;性能较高
缺点:同样情况下相比与EclipseLink消耗更多资源
(2)EclipseLink
优点:更符合JPA规范,占用资源(和Hibernate在同样情况下CPU和内存资源消耗小)
缺点:性能上略低于Hibernate,参考资料较少
三、JPA规范和Mybatis+MyCat实现方案对比
1、JPA规范
(1)优点:将来换数据库类型(比如:从MySQL换到Oracle等)代码改动小;可以表达继承聚合等关系;
(2)缺点:性能较低;学习成本高
2、Mybatis+MyCat
(1)优点:性能高;上手容易;更加灵活
(2)缺点:将来换数据库类型(比如:从MySQL换到Oracle等)代码改动小
3、参考资料
ORM & MyBatis VS Hibernate
1、权衡利弊看得失;
2、我们的项目需要好几个系统一块儿来完成,不同的系统有不同的特点,比如有的联合查询比较多,这时候Mybatis的优势更大等,扬长避短在不同的系统或模块中会采用不同的技术;
3、多对比不同的技术,了解每个技术实现的原理十分有利于我们的成长。