As part of its suite of CRUD functionality, Prisma has a createMany
function
that allows you to insert
many records at once with your target database.
This will perform one large insert statement which will generally be faster
than an equivalent series of individual insert statements.
const createResult = await prisma.books.createMany({
data: [
{ isbn: '123', title: 'The Goldfinch' },
{ isbn: '345', title: 'Piranesi' },
{ isbn: '987', title: 'The Fifth Season' },
],
skipDuplicates: true
})
With the skipDuplicates
option, any inserts that would result in a duplicate
record (isbn
is my unique key in this example) will be skipped.
The result of the query will include a count
key to let you know how many
records were actually inserted.
If I'm bulk inserting a ton of data, I like to chunk it up so that I'm not
creating queries that are too big. For a recent script, I found that 1000
was
a good chunking number.
import 'chunk' from 'lodash/chunk'
const chunkedBatchInsert = async (records) => {
for(const batch of chunk(records, 1000)) {
await prisma.books.createMany({
data: batch,
skipDuplicates: true
})
}
}