开发时的应用程序使用单个数据库,弹簧配置如下。
<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 :(得分:1)
虽然Spring没有参与,但我也遇到了类似的问题。我们开发了针对MySQL的本地实例(每个开发人员在他们的盒子上有一个),并且生产系统是主/从复制环。我们实际上更进一步,将应用程序服务器与数据库服务器放在一起,因此在应用程序和数据库级别都有一个四节点集群。
我们的应用程序在JBoss中运行。它相当轻,但在应用程序服务器级别确实有一些严重的集群。尽管如此,我们能够获得超过300个请求/秒,有时接近1000个请求/秒(取决于应用程序处理)。数据库永远不是瓶颈 - 即使在这些速率下,我们也很少看到连接池超过5个连接。
在这两种情况下(我和你的),由于JDBC URL指向本地服务器,因此从应用程序的角度来看,实际上没有任何功能差异。我不得不使用自动增量设置来玩一些有趣的配置游戏,以防止数据被踩到;如果你只有一个部署点(因此只有一个访问MySQL实例的点),你就不必担心这些。
因此,没有代码更改,也没有配置更改。它会起作用。在标准条件下,由主/从实例对或群集支持的事实不会产生影响,因为您很可能指向群集或面向群集的MySQL实例(在MySQL中) ,集群在一个或多个数据库服务器后面,复制数据。)
您想要处理哪种负载? MySQL过去benchmarked的速度大于1000 TPS,但结果往往会因底层系统特性(内存,CPU内核,处理器速度),应用程序的响应速度和并发线程而异。
答案 1 :(得分:-1)
如果Hibernate使用的DataSource连接到 master ,那么在MySQL中启用复制根本不会影响Hibernate配置,这是典型的。如果你也需要连接到奴隶(用于查询)那么这是一个不同的配置。
mlschechter是对的,MySQL可以在适当调整的硬件上每秒处理数千个事务。此外,Hibernate可用于减少数据库(会话视图框架,二级缓存)的负载,因此您可以在必须获取新数据库之前在应用服务器端进一步扩展。