2017-04-10 1 views
0

別々のリーダー/ライターMySQLサーバーを使用する必要があります。 1つのライターと1つ(またはそれ以上)の読み取りレプリカ。Spring + Hibernate:異なるデータソースと数千のmysqlデータベースを読み書きする

これを行うにはどのような方法が最適ですか?


http://www.dragishak.com/?p=307

使用特別なJDBCドライバ:com.mysql.jdbc.ReplicationDriver

と使用方法です:

@Transactional(readOnly=true) 
@ReadOnlyConnection 
public Result serviceMethod(…) { 
    … 
} 
私は多くの例が見つかっ

enter image description here

スプリングAbstractRoutingDatasourceを使用


https://stackoverflow.com/a/33169879/1974494

10:

使用法:私はDbTypeのを設定する必要があり、各方法において

@Transactional(readOnly = true) 
public Page<BookDTO> getBooks(Pageable p) { 
    try{ 
    DbContextHolder.setDbType(DbType.REPLICA1); // <----- set ThreadLocal DataSource lookup key 

レプリカサーバに「読み込みクエリ」を自動的に送信し、マスターサーバに「書き込みクエリ」(挿入/更新)を自動的に送信することはできますか?


そして、2つ目の質問:

私は(非常に大きな)ユーザーごとにMySQLデータベースを持っていると思います。私は約2,000人のユーザーがいると思う。だから私は各ユーザ*リーダー+ライターのためのデータソースを定義することはできません。

例:

spring.ds_items.driverClassName=com.mysql.jdbc.Driver 
spring.ds_items.url=jdbc:mysql://mysql-master/user1 
spring.ds_items.username=root 
spring.ds_items.password=12345 

spring.ds_items.driverClassName=com.mysql.jdbc.Driver 
spring.ds_items.url=jdbc:mysql://mysql-replica1/user1 
spring.ds_items.username=root 
spring.ds_items.password=12345 

spring.ds_items.driverClassName=com.mysql.jdbc.Driver 
spring.ds_items.url=jdbc:mysql://mysql-master/user2 
spring.ds_items.username=root 
spring.ds_items.password=12345 

spring.ds_items.driverClassName=com.mysql.jdbc.Driver 
spring.ds_items.url=jdbc:mysql://mysql-replica1/user2 
spring.ds_items.username=root 
spring.ds_items.password=12345 

私のようなテーブルの何かを一つの「メインMySQLデータベース」を持っているしたいと思います:

user db_name 
-------------- 
test1 db_test1 
test2 db_test2 

そして、私は、ユーザーtest2のためのいくつかのデータを必要とする場合、私は、メイン「を見てデータベース "と、データベースdb_test2の情報を取得します。その後、データベースdb_test2にクエリを送信します。

答えて

3

MySQLコネクタ/ Jレプリケーション対応ドライバ設定を使用することをお勧めします。接続文字列は、読み取り専用としてお取引をタグ付けしたら、自動的にのみ奴隷

https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-master-slave-replication-connection.html

+0

ニースを読むためにルーティングされます

jdbc:mysql:replication://[master host][:port],[slave host 1][:port][,[slave host 2][:port]]...[/[database]] 

以下のようになります。これを試す必要があります。 – Christian

関連する問題