Accelerate Prisma Client extension
This is the package for the Prisma Client extension that enables usage of Prisma Accelerate.
Prisma Accelerate provides an external connection pool and global caching layer that you can use to speed up your database queries.
It is part of the Prisma ecosystem, alongside other tools such as:
- Prisma ORM: Next-generation Node.js and TypeScript ORM, supporting PostgreSQL, MySQL, MariaDB, SQL Server, SQLite, CockroachDB, and MongoDB.
- Prisma Pulse: Real-time database events with type-safe subscriptions.
Prisma is leading Data DX, a philosophy that promotes simplicity in data-driven application development. Learn more on the Data DX manifesto.
Getting started with Accelerate
Resources
You can explore Accelerate with the following resources:
Using Accelerate
1. Enable Accelerate
Log into Prisma Data Platform and enable Accelerate for your project.
2. Add Accelerate to your application
Replace the database connection string with the Accelerate connection string you generated in Prisma Data Platform (assuming you store your database connection string in the DATABASE_URL
in the .env
file):
DATABASE_URL="prisma://accelerate.prisma-data.net/?api_key=__API_KEY__"
To be able to seamlessly continue to use Prisma Migrate, you can set the directUrl
property in your datasource
:
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
directUrl = env("DIRECT_DATABASE_URL")
}
And then add the URL that connects directly to your database as the value for DIRECT_DATABASE_URL
:
DATABASE_URL="prisma://accelerate.prisma-data.net/?api_key=__API_KEY__"
DIRECT_DATABASE_URL="postgresql://USER:PASSWORD@HOST:PORT/DATABASE"
Finally, extend your Prisma Client instance with the Accelerate extension to enable Accelerate’s connection pool:
import { PrismaClient } from "@prisma/client/edge";
import { withAccelerate } from "@prisma/extension-accelerate";
const prisma = new PrismaClient().$extends(withAccelerate());
3. Add caching to your Accelerate queries
You can optionally configure caching on a per-query level using the ttl
(Time-To-Live) and swl
(Stale-While-Revalidate) options:
await prisma.user.findMany({
cacheStrategy: {
ttl: 3_600,
swr: 500,
},
});