将数据导入Prisma/PostgreSQL服务的最有效方法?

将数据导入Prisma/PostgreSQL服务的最有效方法?,postgresql,prisma,Postgresql,Prisma,我有一个连接到PostgreSQL数据库的Prisma(1.14.2)服务正在运行。我需要通过Prisma连接器插入许多与PostgreSQL数据库具有一对多关系的节点。现在我用下面的方法做这件事。笔划和样本数组包含许多节点: for (let strokeIndex = 0; strokeIndex < painting.strokes.length; strokeIndex++) { const stroke = painting.strokes[strokeIndex];

我有一个连接到PostgreSQL数据库的Prisma(1.14.2)服务正在运行。我需要通过Prisma连接器插入许多与PostgreSQL数据库具有一对多关系的节点。现在我用下面的方法做这件事。
笔划
样本
数组包含许多节点:

for (let strokeIndex = 0; strokeIndex < painting.strokes.length; strokeIndex++) {
    const stroke = painting.strokes[strokeIndex];
    const samples = stroke.samples;
    const createdStroke = await PrismaServer.mutation.createStroke({
        data: {
            myId: stroke.id,
            myCreatedAt: new Date(stroke.createdAt),
            brushType: stroke.brushType,
            color: stroke.color,
            randomSeed: stroke.randomSeed,
            painting: {connect: {myId: jsonPainting.id}},
            samples: { create: samples }
        }
    });
}
for(让strokeIndex=0;strokeIndex
在128个冲程和每个冲程128个样本的情况下(即总共16348个样本)这大约需要38秒

我想知道是否有办法加快这一进程?特别是因为笔划和采样的数量可能会更高。我可以使用
prisma导入…
,它显示了6倍的加速。但我想避免必要的转换到

我读过关于在PostgreSQL中加快插入速度的文章,但我不确定是否以及如何将其应用于Prisma连接器。

往返(查询API、查询数据库并返回值)需要很多时间。 实际上,它肯定比实际的SQL查询花费更多的时间

为了解决您的问题,您可能应该批处理您的查询。有很多方法可以做到这一点,您可以使用GraphQL查询批处理包,也可以简单地这样做:

mutation {
  q1: createStroke(color: "red") {
    id
  }
  q2: createStroke(color: "blue") {
    id
  }
}
请记住Prisma,因此您可能需要限制批次大小


给定每个批次的查询数n,它会将往返次数除以n。

在您删除最新问题之前,我无法发布此消息,所以请在这里告诉您:FWIW,如果您有
std::string
std::string_视图
您可以使用
string_variable.front()==string_variable.back()
不支付正则表达式所需的所有费用