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

本文介绍了如何通过Docker和Docker Compose设置只读副本来提升Spring Data应用程序的读取性能。通过使用两个PostgreSQL实例,一个用于写操作,另一个用于读操作,模拟了读写分离的环境。文章提供了初始化数据库的脚本和Docker Compose配置文件,展示了如何启动和验证数据库实例。下篇博客将关注在主数据库上运行的应用程序配置。
摘要由CSDN通过智能技术生成
只读存储器

只读存储器

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

对于这个项目,我们的目标是建立我们的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、付费专栏及课程。

余额充值