2009-04-09 54 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