2009-04-09 57 views
4

开发时的应用程序使用单个数据库,弹簧配置如下。MySQL簇(主/从)和休眠

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
    <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
    <property name="url" value="jdbc:mysql://localhost:3306/test" /> 
    <property name="username" value="root" /> 
    <property name="password" value="" /> 
</bean> 


<bean id="hibernateProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> 
    <property name="properties"> 
    <props> 
     <prop key="hibernate.hbm2ddl.auto">update</prop> 
     <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
     ... 
     </props> 
    </property> 
</bean> 

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
    <property name="dataSource"> 
     <ref local="dataSource" /> 
    </property> 
    <property name="hibernateProperties"> 
    <ref bean="hibernateProperties" /> 
    </property> 
    <property name="mappingResources"> 
    <list> 
     <value>...</value> 
    </list> 
    </property> 
</bean> 

<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 

但是对于生产而言,有可能使用MySQL集群或主/从复制。任何关于代码/配置更改的想法?

另外一个快速的问题 - 一个专用服务器上运行的单个mysql服务器实例可以处理多少交易/秒?

+0

我意识到有更好的方法,比如引入一个新图层说Terracotta,并使用hibernate实体作为分离对象,以便单个数据库可以处理需求。 – 2009-04-10 07:13:48

+0

嗨,你有没有能够使用spring/hibernate配置mysql复制?我也遇到了同样的问题。 – 2012-06-04 10:16:07

回答

1

虽然没有涉及Spring,但我已经研究过类似的问题。我们开发了针对本地MySQL实例的指向(每个开发者都在他们的盒子上有一个实例),生产系统是主/从复制环。我们实际上更进了一步,将应用程序服务器与数据库服务器放在一起,因此在应用程序和数据库级别都有一个四节点的群集。

我们的应用程序在JBoss中运行。它非常轻,但在应用程序服务器级别确实有一些严重的群集。所有这一切,我们能够获得每秒300个请求,有时接近1000个请求/秒(取决于应用程序处理)。数据库从来都不是瓶颈 - 即使在这些速率下,我们也很少看到连接池高于5个连接。

在这两种情况下(我的和你的),由于JDBC URL指向本地服务器,从应用程序的角度来看,没有任何功能差异。我必须用自动增量设置来玩一些有趣的配置游戏,以防止数据被踩到;如果你只有一个部署点(并且因此只有一个访问MySQL实例的点),那么你不需要担心任何一点。

因此,不会更改代码,也不会更改配置。它会工作。在标准条件下,由主/从实例对或集群支持的事实不会有什么区别,因为您很可能指向主集群或面向集群的MySQL实例(在MySQL中,该集群在一个或多个数据库服务器后面,复制数据)。

你想要处理什么类型的负载?在过去,MySQL已经在benchmarked以上> 1000 TPS,但结果往往会根据底层系统特征(内存,CPU核心,处理器速度),应用程序的响应性和并发线程而有所不同。

-1

如果在Hibernate使用的DataSource连接到主节点(这是典型的),那么在MySQL中启用复制并不会影响您的Hibernate配置。如果您也需要连接到从站(用于查询),那么这是一个不同的配置。

mlschechter是正确的,MySQL可以在正确调优的硬件上每秒处理数千次事务。另外,Hibernate可以用来减少数据库的负载(session-in-view框架,二级缓存),所以您可以在获取新数据库之前在应用服务器端进一步扩展。

+0

Downvote并没有解释?我的回答有问题吗? – 2014-04-04 12:52:29