使用Datafaker Gen灵活生成数据

Datafaker是一个现代化框架,用于快速生成虚拟数据,支持多种格式导出。文章详细介绍了DatafakerGen,一个基于Datafaker的命令行生成器,及其配置、扩展接收器如RabbitMQ,以及其在软件开发中的应用和性能表现。
摘要由CSDN通过智能技术生成

Datafaker简介
数据制造商是一个现代化的框架虚拟机(Java Virtual Machine的缩写)程序员使用200多个数据提供者高效地为他们的项目生成虚假数据,从而实现快速设置和使用。当您需要一些特定于域的数据时,可以编写自定义提供程序。除了提供者之外,生成的数据还可以导出为CSV、JSON、SQL、XML和YAML等流行格式。

有关基本功能的详细介绍,请参见“Datafaker:使用生产数据的替代方法."

Datafaker提供了许多功能,例如处理序列和集合以及基于模式生成自定义对象(请参见“Datafaker 2.0").

批量数据生成
在软件开发和测试中,需要频繁地为各种目的生成数据,无论是进行非功能性测试还是模拟突发负载。让我们考虑一个简单的场景,我们的任务是在JSON要发送到的格式兔子q.

在我看来,这些选项值得考虑:

开发自己的工具:一种选择是从头开始编写一个定制应用程序来生成这些记录(消息)。如果生成的数据需要更加真实,使用数据制造商或者JavaFaker.
使用特定工具:或者,我们可以选择为特定数据库或消息代理设计的特定工具。例如,像健谈的为卡夫卡提供生成和发布Kafka主题消息的专门功能;或者更现代的工具影子交通,目前正在开发中,旨在采用基于容器的方法,但这并不总是必要的。
数据生成器生成:最后,我们可以选择使用Datafaker Gen,这是我想在当前文章中考虑的。
Datafaker Gen概述
数据生成器生成提供基于Datafaker库的命令行生成器,允许连续生成各种格式的数据,并与不同的存储系统、消息代理和后端服务集成。由于此工具使用Datafaker,因此数据可能是真实的。无需重新构建项目即可配置方案、格式类型和接收器。

Datafake Gen由以下可配置的主要组件组成:

1.模式定义
用户可以在config.yaml文件。该架构根据数据制造商提供程序。它还允许定义嵌入字段。

default_locale: en-EN
fields:
  - name: lastname
    generators: [ Name#lastName ]
  - name: firstname
    generators: [ Name#firstName ]

2.格式
Datafake Gen允许用户指定生成记录的格式。目前,CSV、JSON、SQL、XML和YAML格式都有基本的实现。此外,可以使用自定义实现来扩展格式。格式的配置在输出。yaml文件。

formats:
  csv:
    quote: "@"
    separator: $$$$$$$
  json:
    formattedAs: "[]"
  yaml:
  xml:
    pretty: true

3.水槽
接收器组件确定所生成数据的存储或发布位置。基本实现包括命令行输出和文本文件接收器。此外,可以使用RabbitMQ之类的自定义实现来扩展接收器,如本文所演示的。接收器的配置在输出。yaml文件。

sinks:
  rabbitmq:
    batchsize: 1 # when 1 message contains 1 document, when >1 message contains a batch of documents
    host: localhost
    port: 5672
    username: guest
    password: guest
    exchange: test.direct.exchange
    routingkey: products.key

通过Java SPI的可扩展性
Datafake Gen使用Java SPI(服务提供者接口)来轻松添加新格式或接收器。这种可扩展性允许根据特定要求定制Datafake Gen。

如何在Datafake Gen中添加新的接收器
在添加新接收器之前,您可能希望检查它是否已经存在于data faker-gen-示例知识库。如果不存在,您可以参考如何添加新水槽的示例。

当涉及到使用新的sink实现扩展Datafake Gen时,开发人员有两个主要选择要考虑:

通过使用这个父项目,开发人员可以为他们的sink扩展实现sink接口,类似于datafaker-gen-examples存储库中可用的接口。
包括来自Maven仓库的依赖项以访问所需的接口。对于这种方法,Datafake Gen应该构建并存在于本地Maven存储库中。这种方法在项目结构和需求方面提供了灵活性。
1. 实现RabbitMQ水槽
要添加新的RabbitMQ接收器,只需实现net . data faker . data faker _ gen . sink . sink界面。

该接口包含两种方法:

getName-此方法定义接收器名称。
run-此方法触发记录的生成,然后将所有生成的记录发送或保存到指定的目标。方法参数包括从中检索的特定于此接收器的配置输出。yaml文件以及数据生成函数和要生成的所需行数。

import net.datafaker.datafaker_gen.sink.Sink;

public class RabbitMqSink implements Sink {

    @Override
    public String getName() {
        return "rabbitmq";
    }

    @Override
    public void run(Map<String, ?> config, Function<Integer, ?> function, int numberOfLines) {
        // Read output configuration ...
        int numberOfLinesToPrint = numberOfLines;
        String host = (String) config.get("host");
      
        // Generate lines 
        String lines = (String) function.apply(numberOfLinesToPrint);

        // Sending or saving results to the expected resource
        // In this case, this is connecting to RebbitMQ and sending messages.
        ConnectionFactory factory = getConnectionFactory(host, port, username, password);
        try (Connection connection = factory.newConnection()) {
            Channel channel = connection.createChannel();
            JsonArray jsonArray = JsonParser.parseString(lines).getAsJsonArray();
            jsonArray.forEach(jsonElement -> {
                try {
				    channel.basicPublish(exchange, routingKey, null, jsonElement.toString().getBytes());
                } catch (Exception e) {
				    throw new RuntimeException(e);
                }
            });
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

2. 为新的RabbitMQ接收器添加配置
如前所述,接收器或格式的配置可以添加到输出。yaml文件。具体字段可能因您的自定义接收器而异。以下是RabbitMQ接收器的配置示例:

sinks:
  rabbitmq:
    batchsize: 1 # when 1 message contains 1 document, when >1 message contains a batch of documents
    host: localhost
    port: 5672
    username: guest
    password: guest
    exchange: test.direct.exchange
    routingkey: products.key

3. 通过SPI添加自定义接收器
通过SPI(服务提供者接口)添加自定义接收器包括在。/resources/META-INF/services/net . data faker . data faker _ gen . sink . sink文件。该文件包含接收器实现的路径:

net.datafaker.datafaker_gen.sink.RabbitMqSink

这是关于如何扩展Datafake Gen的3个简单步骤。在本例中,我们不提供sink的完整实现,以及如何使用其他库。要查看完整的实现,可以参考示例存储库中的datafaker-gen-rabbitmq模块。

怎么跑
第一步
基于新实现构建一个JAR文件:

./mvnw clean verify

第二步
中的记录定义架构config.yaml文件,并将该文件放在生成器应该运行的适当位置。此外,在中定义接收器和格式输出。yaml文件,如前所述。

第三步
Datafake Gen可以通过两个选项执行:

从使用bash脚本箱子父项目中的文件夹:

# Format json, number of lines 10000 and new RabbitMq Sink
bin/datafaker_gen -f json -n 10000 -sink rabbitmq

直接执行JAR,如下所示:

java -cp [path_to_jar] net.datafaker.datafaker_gen.DatafakerGen -f json -n 10000 -sink rabbitmq

有多快?
测试是基于上述方案进行的,这意味着一个文档包含两个字段。文档以JSON格式逐个记录在RabbitMQ队列中。下表显示了我的本地计算机上10,000、100,000和1M记录的速度:
记录 时间
10000 401毫秒
100000 11613毫秒
1000000 121601毫秒
结论
Datafake Gen工具可以为各种类型的目的地创建灵活快速的数据生成器。它建立在Datafaker之上,有助于生成真实的数据。开发人员可以轻松配置记录、格式和接收器的内容以满足他们的需求。作为简单的Java 语言(一种计算机语言,尤用于创建网站)应用程序,它可以部署在您想要的任何地方,无论是在码头工人或本地机器。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小徐博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值