当前位置:Java -> 利用Quarkus和HarperDB实现高效数据管理

利用Quarkus和HarperDB实现高效数据管理

在不断发展的数据库技术领域,保持领先并不是一个选择,而是一种必要。随着现代应用程序不断增长,并具有复杂性和全球范围,底层数据库的作用变得日益关键。它是支持应用程序无缝运行和存储检索大量数据的支柱。在这个全球规模应用程序的时代,拥有高性能、灵活和高效的数据库至关重要。

随着现代应用程序的需求激增,需要能跟得上的数据库从未如此重要。"超级数据库"已成为确保应用程序在全球范围内无缝高效运行的关键角色。这些数据库需要提供速度、多功能性和适应性的独特组合,以满足各种应用程序的不同需求,从电子商务平台到物联网系统。

它们需要不仅仅是数据存储库。它们必须充当智能的中枢,能够快速处理、存储和服务数据,同时提供实时分析、安全性和可伸缩性。理想的超级数据库不仅仅是一个存储设施;它是推动定义现代数字领域的动态数据驱动应用程序的引擎。

HarperDB 4.2的最新版本引入了一个统一的企业应用开发架构,为构建全球规模应用程序提供了一种方法。

HarperDB 4.2

HarperDB 4.2是一个综合解决方案,无缝地将超快速数据库、用户可编程应用程序和数据流集成成一体。其结果是一个简化复杂性、加快速度和降低成本的开发环境。HarperDB 4.2提供了一个统一平台,赋予开发人员创造能够轻松快速处理数据并在全球范围内运行的应用程序的能力。

在本教程中,我们将探索HarperDB 4.2的功能,并向您展示如何与Java Quarkus协作,利用其功能构建强大和高性能的应用程序,展示这一统一开发架构的潜力。因此,请加入我们,一起开启启迪人心的旅程,改革您的应用程序开发流程。

使用HarperDB创建Quarkus微服务API,第1部分:设置环境

本节将指导您配置开发环境,并创建必要的项目设置以开始。

步骤1:配置环境

在进行开发之前,您需要设置您的开发环境。我们将首先在Docker容器中运行HarperDB。

要实现这一点,打开终端并运行以下命令:

docker run -d   -e HDB_ADMIN_USERNAME=root   -e HDB_ADMIN_PASSWORD=password   -e HTTP_THREADS=4  -p 9925:9925   -p 9926:9926 harperdb/harperdb


这个命令将下载并运行HarperDB Docker容器,以指定的配置公开必要的通信端口。

步骤2:创建架构和表

在HarperDB已启动的情况下,下一步是创建架构并定义表以存储动物数据。我们将使用“curl”命令与HarperDB的RESTful API进行交互。

  1. 通过执行以下命令创建名为“dev”的架构:

curl --location --request POST 'http://localhost:9925/' \
--header 'Authorization: Basic cm9vdDpwYXNzd29yZA==' \
--header 'Content-Type: application/json' \
--data-raw '{
    "operation": "create_schema",
    "schema": "dev"
}'


这条命令发送POST请求以创建“dev”架构。

  1. 接下来,使用以下命令创建名为“animal”的表,并使用“scientificName”作为哈希属性:

curl --location 'http://localhost:9925' \
--header 'Authorization: Basic cm9vdDpwYXNzd29yZA==' \
--header 'Content-Type: application/json' \
--data '{
    "operation": "create_table",
    "schema": "dev",
    "table": "animal",
    "hash_attribute": "scientificName"
}'


这个命令在“dev”架构内建立了“animal”表。

3. 现在,通过创建“name”,“genus”和“species”属性,为“animal”表添加所需属性:

curl --location 'http://localhost:9925' \
--header 'Authorization: Basic cm9vdDpwYXNzd29yZA==' \
--header 'Content-Type: application/json' \
--data '{
    "operation": "create_attribute",
    "schema": "dev",
    "table": "animal",
    "attribute": "name"
}'

curl --location 'http://localhost:9925' \
--header 'Authorization: Basic cm9vdDpwYXNzd29yZA==' \
--header 'Content-Type: application/json' \
--data '{
    "operation": "create_attribute",
    "schema": "dev",
    "table": "animal",
    "attribute": "genus"
}'

curl --location 'http://localhost:9925' \
--header 'Authorization: Basic cm9vdDpwYXNzd29yZA==' \
--header 'Content-Type: application/json' \
--data '{
    "operation": "create_attribute",
    "schema": "dev",
    "table": "animal",
    "attribute": "species"
}'


这些命令在“dev”架构内的“animal”表中添加了“name”“genus”“species”属性。

通过配置HarperDB并设置架构和表,您可以开始构建基于Quarkus的微服务API来管理动物数据。敬请期待教程的下一部分,我们将深入开发过程。

构建Quarkus应用程序

我们配置了HarperDB并准备了环境。现在,我们将开始构建我们的Quarkus应用程序以管理动物数据。Quarkus通过一个便利的项目生成器来简化初始设置,让我们开始吧。

Quarkus提供一个直观的基于Web的项目生成器,简化了初始设置。访问Quarkus项目生成器,并按照以下步骤操作:

  1. 选择您在项目中需要的扩展。为了处理REST端点和JSON序列化,为本教程添加“JAX-RS”和“JSON”。
  2. 单击“生成您的应用程序”按钮。
  3. 下载生成的ZIP文件,并解压缩到您想要的项目目录。

有了生成的Quarkus项目,您就可以继续前进了。

我们的项目将使用DataFaker库和HarperDB Java驱动程序来生成动物数据以与HarperDB数据库交互。要包含HarperDB Java驱动程序,请阅读之前的文章。在您的Quarkus项目中,创建一个Java Record来表示Animal实体。该记录将拥有用于科学名称、名称、种和物种的字段,使您能够高效地处理动物数据。

public record Animal(String scientificName, String name, String genus, String species) {
    public static Animal of(Faker faker) {
        var animal = faker.animal();
        return new Animal(
            animal.scientificName(),
            animal.name(),
            animal.genus(),
            animal.species()
        );
    }
}


这个记录包括一个工厂方法of,它使用DataFaker库生成具有随机数据的Animal实例。我们将使用这个方法来填充我们的数据库,以记录动物数据。

在您的Quarkus项目中,我们将设置CDI(上下文和依赖注入)来处理数据库连接和数据访问。这里是一个创建ConnectionSupplier类的示例,该类管理数据库连接:

@ApplicationScoped
public class ConnectionSupplier {

    private static final Logger LOGGER = Logger.getLogger(ConnectionSupplier.class.getName());

    @Produces
    @RequestScoped
    public Connection get() throws SQLException {
        LOGGER.info("Creating connection");
        // Create and return the database connection, e.g., using DriverManager.getConnection
    }

    public void dispose(@Disposes Connection connection) throws SQLException {
        LOGGER.info("Closing connection");
        connection.close();
    }
}


ConnectionSupplier类使用CDI注解来生成和释放数据库连接。这使得Quarkus可以为您管理数据库连接的生命周期。

让我们创建AnimalDAO类来使用JDBC与数据库进行交互。这个类将具有用于插入和查询动物数据的方法。

@ApplicationScoped
public class AnimalDAO {

    private final Connection connection;

    public AnimalDAO(Connection connection) {
        this.connection = connection;
    }

    public void insert(Animal animal) {
        try {
            // Prepare and execute the SQL INSERT statement to insert the animal data
        } catch (SQLException exception) {
            throw new RuntimeException(exception);
        }
    }

    public Optional<Animal> findById(String id) {
        try {
            // Prepare and execute the SQL SELECT statement to find an animal by ID
        } catch (SQLException exception) {
            throw new RuntimeException(exception);
        }
    }

    // Other methods for data retrieval and manipulation
}


AnimalDAO类中,您将使用JDBC执行数据库操作。您可以添加更多方法来处理各种数据库任务,比如更新和删除动物记录。

AnimalService类将生成动物数据并利用AnimalDAO进行数据库交互。

@ApplicationScoped
public class AnimalService {

    private final Faker faker;
    private final AnimalDAO dao;

    @Inject
    public AnimalService(Faker faker, AnimalDAO dao) {
        this.faker = faker;
        this.dao = dao;
    }

    // Implement methods for generating and managing animal data
}


AnimalService中,您将使用DataFaker库生成随机的动物数据,并使用AnimalDAO进行数据库操作。

有了这些组件,您已经为基于Quarkus的Microservice API与HarperDB搭建了基础。在教程的下一部分中,我们将深入开发RESTful端点和数据管理。

创建AnimalResource类

在本教程的最后部分,我们将创建一个AnimalResource类,通过HTTP端点公开我们的动物服务。此外,我们将提供示例curl命令,以演示如何在本地使用这些端点。

创建一个带有RESTful端点来管理动物数据的AnimalResource类。这个类将与AnimalService交互,处理HTTP请求和响应。

@Path("/animals")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class AnimalResource {
    private final AnimalService service;

    public AnimalResource(AnimalService service) {
        this.service = service;
    }

    @GET
    public List<Animal> findAll() {
        return this.service.findAll();
    }

    @POST
    public Animal insert(Animal animal) {
        this.service.insert(animal);
        return animal;
    }

    @DELETE
    @Path("{id}")
    public void delete(@PathParam("id") String id) {
        this.service.delete(id);
    }

    @POST
    @Path("/generate")
    public void generateRandom() {
        this.service.generateRandom();
    }
}


在这个类中,我们定义了几个RESTful端点,包括:

  • GET /animals: 返回所有动物的列表。
  • POST /animals: 插入一个新动物。
  • DELETE /animals/{id}: 根据ID删除动物。
  • POST /animals/generate: 生成随机动物数据。

以下是用于在http://localhost:8080/animals/作为基础URL本地测试HTTP端点的curl命令:

检索所有动物(GET)

   curl -X GET http://localhost:8080/animals/


插入一个新动物(POST)

   curl -X POST -H "Content-Type: application/json" -d '{
       "scientificName": "Panthera leo",
       "name": "Lion",
       "genus": "Panthera",
       "species": "Leo"
   }' http://localhost:8080/animals/


根据ID删除动物(DELETE)

用要删除动物的ID替换{id}

   curl -X DELETE http://localhost:8080/animals/{id}


生成随机动物数据(POST)

该端点不需要任何请求数据:

   curl -X POST http://localhost:8080/animals/generate


curl命令允许您与基于Quarkus的微服务API进行交互,执行操作,如检索、插入和删除动物数据。生成的随机数据端点可用于填充您的数据库以进行测试数据。

有了这些RESTful端点,您已经拥有一个完全功能的Quarkus应用程序,集成了HarperDB来管理通过HTTP的动物数据。您可以进一步扩展和增强这个应用程序,以满足您的特定需求。祝贺您完成这个教程!

结论

在这个教程中,我们开始了一个新的旅程,构建了一个集成了HarperDB的Quarkus微服务API,HarperDB是一个强大高性能的数据库。我们首先搭建了环境,并创建了一个带有必要扩展的Quarkus项目。借助DataFaker库,我们生成了随机动物数据来填充我们的HarperDB数据库。

我们应用程序的核心是与HarperDB的无缝集成,展示了HarperDB Java驱动程序的功能。我们使用CDI有效地管理数据库连接,并创建了一个结构化的数据访问层,其中包括AnimalDAO类。通过这一点,我们执行了一些数据库操作,比如插入和查询动物数据。

通过AnimalService类的实现,我们将生成的数据与数据库操作结合起来,使我们的动物数据管理生动起来。最后,我们通过AnimalResource类在RESTful端点公开了我们的动物服务,允许我们通过HTTP请求与服务进行交互。

您可以在GitHub上查看这个项目的完整源代码。随意分支、修改和扩展它以适应您的需求。

当您继续探索HarperDB和Quarkus世界时,请记住查阅HarperDB文档,深入了解HarperDB的功能和特性。

及时了解HarperDB官方网站的最新更新、发布说明和新闻,确保您始终使用最新的信息。查看最新的发布说明,了解HarperDB中的新功能和改进。

通过结合Quarkus和HarperDB,您将能够构建高效可扩展的应用程序,以满足现代数字领域的要求。愉快地编码吧!

推荐阅读: 百度面经(1)

本文链接: 利用Quarkus和HarperDB实现高效数据管理