別々のリーダー/ライターMySQLサーバーを使用する必要があります。 1つのライターと1つ(またはそれ以上)の読み取りレプリカ。Spring + Hibernate:異なるデータソースと数千のmysqlデータベースを読み書きする
これを行うにはどのような方法が最適ですか?
http://www.dragishak.com/?p=307
使用特別なJDBCドライバ:com.mysql.jdbc.ReplicationDriver
と使用方法です:
@Transactional(readOnly=true)
@ReadOnlyConnection
public Result serviceMethod(…) {
…
}
私は多くの例が見つかっ
スプリング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
にクエリを送信します。
ニースを読むためにルーティングされます
以下のようになります。これを試す必要があります。 – Christian