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 语言(一种计算机语言,尤用于创建网站)应用程序,它可以部署在您想要的任何地方,无论是在码头工人或本地机器。