有没有办法写一批记录,期待一些失败?

Is there a way to write a batch of records, expecting some to fail?

说有系统中断;由于某种原因,每 100 次访问 1 次页面的记录没有进入您的 Spanner 实例。可能是QA的错。无论如何,您有不同的数据存储,您可以从中上传到 Spanner。伟大的!假设您有大量记录,您会将它们分批处理,可能一次最多发送 1000 条。但是这 1000 个中的 990 个可能已经存在于扳手中,因此您的插入操作将失败。你可以一个接一个地上传,但你会为此付出巨大的性能损失。您甚至可以尝试一些自适应批量大小,但这最终会变得有点复杂。

有没有简单的方法可以解决这个问题?我想要 dbClient.writeAtLeastOnceIgnoreErrors(Iterable<Mutation>),但我认为没有那种东西可用。我错了吗?

如果我正确理解您的问题,您希望能够向 Spanner 发送 1,000 个变更(插入),并且知道这 1,000 条记录中的许多记录已经存在于 Spanner 中。最简单的方法是像这样使用 InsertOrUpdate 突变:

Mutation m = Mutation.newInsertOrUpdateBuilder("YOUR_TABLE").set("COL1").to("some_val").build();
dbClient.writeAtLeastOnce(m);

InsertOrUpdate 将完全按照您的预期进行操作,即仅插入尚不存在的记录,并更新已存在的记录而不返回任何错误。您必须为 table.

中的所有 NOT NULL 列提供一个值