超越 Prisma ORM
作为 Prisma ORM 的用户,您已经体验到了类型安全的数据库查询和直观的数据建模的强大功能。然而,当扩展生产应用程序时,新的挑战就会出现。随着应用程序的成熟,您肯定会开始遇到连接池的复杂性,找到有效缓存常见查询的方法,或者开发复杂的、事件驱动的系统来处理实时或时间敏感的功能。
与其花费您宝贵的时间来克服这些挑战,不如让我们探索一下 Prisma 如何通过扩展 ORM 的功能来帮助您,随着您的应用程序的增长。
使用 Prisma Accelerate 提升应用程序性能
随着应用程序的扩展,您可能需要工具来高效地处理增加的流量。这通常涉及到实现连接池来管理数据库连接,以及缓存策略来减少数据库负载并提高响应时间。Prisma Accelerate 在单个解决方案中满足了这些需求,无需设置和管理单独的基础设施。
Prisma Accelerate 特别适用于部署到无服务器和边缘环境(也称为函数即服务)的应用程序,因为这些部署比传统的、长期存在的应用程序更容易产生更多的连接。对于这些应用程序,Prisma Accelerate 还具有从第一天起就保护您的数据库并保持您的应用程序在线的额外好处,无论您遇到什么流量。
试用 Accelerate 速度测试,看看有哪些可能性。
通过连接池提高查询性能
将您的连接池放置在全球 15 个以上的区域之一,最大限度地减少数据库操作的延迟。在无服务器和边缘环境中启用高性能分布式工作负载。
通过缓存减少查询延迟和数据库负载
在 300 多个全球存在点缓存查询结果。Accelerate 扩展了您的 Prisma 客户端,在每个查询的基础上提供对缓存模式(例如 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 客户端,为您提供了一个 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 客户端扩展 构建在 Prisma ORM 之上。这开启了我们无法在 ORM 中包含的功能,如全局优化的缓存和实时数据同步。创建一个免费帐户,并探索 Accelerate 和 Pulse 如何帮助您构建可扩展的高性能应用程序!
改善开发人员体验并不仅限于 Accelerate 和 Pulse。Prisma 正在构建和扩展我们的产品,以改善数据 DX 的各个方面,我们很乐意听取您的想法。加入我们的社区,了解更多关于我们产品的信息,如下所示