只读副本和Spring Data第1部分:配置数据库

这是有关我们为利用只读副本来提高应用程序性能而寻求的一系列博客文章。

对于这个项目,我们的目标是建立我们的spring数据应用程序,并使用read仓库进行写操作,并基于read副本进行读操作。

为了模拟这种环境,我们将通过Docker使用PostgreSQL实例。

动机很简单。 您的Spring应用程序变得越来越流行,并且您希望它处理更多的请求。 那里的大多数应用程序对读操作而不是写操作的需求更高。 因此,我认为您的应用程序属于同一类别。
尽管SQL数据库本身不能水平扩展,但是您可以通过使用只读副本来使用它们。

我们的目标不是在PostgreSQL中进行实际的Read复制

因此,无需配置任何复制

我们将只从两个数据库中复制一些数据

这是我们将用来填充数据库的脚本。

 #!/bin/bash  set -e  psql -v ON_ERROR_STOP= 1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL 
     create schema spring_data_jpa_example; 
     create table spring_data_jpa_example.employee( 
         id SERIAL PRIMARY KEY, 
         firstname  TEXT   NOT NULL, 
         lastname   TEXT   NOT NULL, 
         email      TEXT   not null , 
         age        INT    NOT NULL, 
         salary        real, 
         unique(email) 
     ); 
     insert into spring_data_jpa_example.employee (firstname,lastname,email,age,salary) 
     values ( 'John' , 'Doe 1' , 'john1@doe.com' , 18 , 1234.23 ); 
     insert into spring_data_jpa_example.employee (firstname,lastname,email,age,salary) 
     values ( 'John' , 'Doe 2' , 'john2@doe.com' , 19 , 2234.23 ); 
     insert into spring_data_jpa_example.employee (firstname,lastname,email,age,salary) 
     values ( 'John' , 'Doe 3' , 'john3@doe.com' , 20 , 3234.23 ); 
     insert into spring_data_jpa_example.employee (firstname,lastname,email,age,salary) 
     values ( 'John' , 'Doe 4' , 'john4@doe.com' , 21 , 4234.23 ); 
     insert into spring_data_jpa_example.employee (firstname,lastname,email,age,salary) 
     values ( 'John' , 'Doe 5' , 'john5@doe.com' , 22 , 5234.23 );  EOSQL 

由于我们将使用Docker和Docker Compose,因此将使用上面的脚本来初始化数据库。 现在开始创建我们的Docker Compose堆栈。

 version: '3.5'  services: 
   write-db: 
     image: postgres 
     restart: always 
     environment: 
       POSTGRES_USER: db-user 
       POSTGRES_PASSWORD: your-password 
       POSTGRES_DB: postgres 
     networks: 
       - postgresql-network 
     ports: 
       - "127.0.0.2:5432:5432" 
     volumes: 
       - $PWD/init-db-script.sh:/docker-entrypoint-initdb.d/init-db-script.sh 
   read-db- 1 : 
     image: postgres 
     restart: always 
     environment: 
       POSTGRES_USER: db-user 
       POSTGRES_PASSWORD: your-password 
       POSTGRES_DB: postgres 
     networks: 
       - postgresql-network 
     ports: 
       - "127.0.0.3:5432:5432" 
     volumes: 
       - $PWD/init-db-script.sh:/docker-entrypoint-initdb.d/init-db-script.sh  networks: 
   postgresql-network: 
     name: postgresql-network 

如您所见,我们的配置非常简单。 如果您足够小心的话,您会发现我将数字分配给了读数据库。 这是因为将来我们将向其添加更多副本。

我还所做的是将计算机绑定到不同的本地ip。

如果您在绑定地址时遇到问题,例如127.0.0。*:5432
你应该试试

 sudo ifconfig lo0 alias 127.0.0.2 up  sudo ifconfig lo0 alias 127.0.0.3 up 

如果不成功,则只需更改端口即可。 可能不那么方便,但是还可以。

因此,让我们启动并运行我们的Docker Compose堆栈。

 docker-compose -f . /postgresql-stack .yaml up 

我们必须能够在两个postgresql实例中查询数据。

 docker exec -it deploy_read-db-1_1 /bin/bash  root@07c502968cb3:/ # psql -v --username "$POSTGRES_USER" --dbname "$POSTGRES_DB"  db-user= # select*from spring_data_jpa_example.employee; 
  id | firstname | lastname |    email    | age | salary | firstname | lastname |    email    | age | salary  ----+-----------+----------+---------------+-----+--------- 
   1 | John     | Doe 1   | john1@doe.com | 18 | 1234.23 
   2 | John     | Doe 2   | john2@doe.com | 19 | 2234.23 
   3 | John     | Doe 3   | john3@doe.com | 20 | 3234.23 
   4 | John     | Doe 4   | john4@doe.com | 21 | 4234.23 
   5 | John     | Doe 5   | john5@doe.com | 22 | 5234.23  (5 rows) 

我们已经为下一步做好了准备。 我们已经启动了一些数据库,并且正在运行它们,我们将在它们之上启动一个spring应用程序。 下一个博客着重于实现在我们的主数据库上运行的应用程序。

翻译自: https://www.javacodegeeks.com/2019/10/read-replicas-spring-data-configuring-databases.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值