超越 Prisma ORM
作为 Prisma ORM 用户,您已经体验了类型安全的数据库查询和直观的数据建模的强大功能。但是,在扩展生产应用程序时,会出现新的挑战。随着应用程序的成熟,您一定会开始遇到连接池的复杂性,找到有效缓存常用查询的方法,或者开发复杂的、事件驱动的系统来处理实时或时间敏感的功能。
与其花费宝贵的时间克服这些挑战,不如让我们探索 Prisma 如何通过扩展 ORM 的功能来帮助您的应用程序成长。
使用 Prisma Accelerate 提升应用程序性能
随着应用程序的扩展,您可能需要工具来有效地处理不断增长的流量。这通常涉及实施连接池来管理数据库连接和缓存策略来减少数据库负载并提高响应时间。Prisma Accelerate 在一个解决方案中解决了这些需求,无需设置和管理单独的基础设施。
Prisma Accelerate 特别适用于部署到无服务器和边缘环境(也称为函数即服务)的应用程序,因为这些部署会导致创建的连接数量比传统的、长期存在的应用程序多几个数量级。对于这些应用程序,Prisma Accelerate 具有从第一天起保护您的数据库并使您的应用程序保持在线的额外优势 无论您遇到什么流量。
试用 Accelerate 速度测试 以了解可能的成果。
使用连接池提高查询性能
将您的连接池放置在 15 个以上全球区域中的一个,最大程度地减少数据库操作的延迟。在无服务器和边缘环境中启用高性能分布式工作负载。
使用缓存减少查询延迟和数据库负载
在 300 多个全球接入点缓存查询结果。Accelerate 扩展了您的 Prisma Client,提供对缓存模式(如每个查询的 ttl
和 swr
)的直观、细粒度控制。
使用托管基础设施处理扩展流量
扩展到每天数百万个查询,而无需更改基础设施。有效地管理数据库连接并使用更少的资源为更多用户提供服务。
立即开始使用 Accelerate
Accelerate 通过 @prisma/extension-accelerate
客户端扩展与您的 Prisma ORM 项目无缝集成。通过我们的 设置指南 快速入门,并立即访问完整的边缘环境支持、连接池和全局缓存。
import { PrismaClient } from '@prisma/client'
import { withAccelerate } from '@prisma/extension-accelerate'
// 1. Extend your Prisma Client with the Accelerate extension
const prisma = new PrismaClient().$extends(withAccelerate())
// 2. (Optionally) add cache to your Prisma queries
const users = await prisma.user.findMany({
cacheStrategy: {
ttl: 30, // Consider data fresh for 30 seconds
swr: 60 // Serve stale data for up to 60 seconds while fetching fresh data
}
})
要查看更多示例,请访问我们的 示例库 或使用 npx try-prisma
自己尝试。
使用 Prisma Pulse 构建实时、事件驱动的应用程序
使用 Prisma ORM,导致读取和写入数据库的 HTTP 请求非常简单。但是,如果您想根据事件触发特定代码,或者仅根据数据库更改运行给定函数,该怎么办?
使用 Pulse,您可以可靠地将数据库更改直接流式传输到您的应用程序!无需不断轮询数据库以查找更改或设置复杂的基础设施来实现此目的。
Pulse 扩展了您的 Prisma Client,为您提供了一个 API,使您能够在数据库更改发生时做出反应,并拥有与 Prisma ORM 相同的出色开发体验。
import { PrismaClient } from '@prisma/client'
import { withPulse } from '@prisma/extension-pulse'
// Extend your Prisma Client with the Pulse extension
const prisma = new PrismaClient().$extends(
withPulse({ apiKey: process.env.PULSE_API_KEY })
)
// You're now ready to develop real-time features with Pulse!
const stream = await prisma.user.stream()
for await (const event of stream) {
console.log('Received database event:', event)
}
查看事件对象和 Pulse API:Pulse API 参考
简化事件驱动的流程
无需复杂的调度和队列,让事件直接从您的数据库到达。
// Stream new users on the `User` model in real-time
const stream = await prisma.user.stream({
create: {}, // This stream will include any User.create event.
name: 'user-create-events' // Name is optional, but allows you to stop and restart the stream without losing any events.
});
for await (let event of stream) {
const { email } = event.created;
// Send welcome email to user after sign up
await sendWelcomeEmail({ email });
}
构建实时体验
当某人通过您的应用程序发送聊天消息时,快速传递至关重要。使用 Pulse 作为数据库事件引擎,为任何实时功能提供动力。
// Stream unread messages on the `Message` model in real-time
const stream = await prisma.message.stream({
create: { read: false }, // Filter for unread messages
});
for await (let event of stream) {
const { senderId, message, chatId } = event.created;
// Update the chat UI and send a notification
await sendMessageInChat({ senderId, message, chatId });
}
保持服务同步
当您的数据发生更改时,将数据同步到外部服务,而无需在代码中添加额外的 API 调用。
// Stream new orders on the `Order` model in real-time
const stream = await prisma.order.stream({
create: {}, // This stream will include any User.create event.
name: 'user-create-events' // Name is optional, but allows you to stop and restart the stream without losing any events.
});
for await (let event of stream) {
const { orderId, orderItems } = event.created;
// Update the inventory
await updateExternalInventoryFromOrder({ orderId, orderItems });
}
要查看更多示例,请访问我们的 示例库 或使用 npx try-prisma
自己尝试。
.
与 Prisma 一起成长
Accelerate 和 Pulse 都采用 Prisma ORM 中内置的功能,并通过添加全局优化缓存和实时数据同步等额外功能来构建它们。免费开始并探索 Accelerate 和 Pulse 如何帮助您构建可扩展、高性能的应用程序!
提升开发者体验并不止于 Accelerate 和 Pulse。Prisma 正在构建和扩展我们的产品,以改善数据 DX 的各个方面,我们希望听到您的想法。加入我们的社区,了解我们下面的产品。
Accelerate 和 Pulse 都通过 Prisma Client 扩展 在 Prisma ORM 上构建。这开启了我们无法在 ORM 中包含的功能,例如全局优化缓存和实时数据同步。创建一个免费的帐户并探索 Accelerate 和 Pulse 如何帮助您构建可扩展、高性能的应用程序!
提升开发者体验并不止于 Accelerate 和 Pulse。Prisma 正在构建和扩展我们的产品,以改善数据 DX 的各个方面,我们希望听到您的想法。加入我们的社区,了解我们下面的产品