跳至主要内容

超越 Prisma ORM

作为 Prisma ORM 用户,您已经体验了类型安全数据库查询和直观数据建模的强大功能。但是,在扩展生产应用程序时,会遇到新的挑战。随着应用程序的成熟,您一定会开始遇到连接池的复杂性,找到有效缓存常见查询的方法,或开发复杂的事件驱动系统来处理实时或时间敏感的功能。

与其花费宝贵的时间来克服这些挑战,不如让我们探索 Prisma 如何通过扩展 ORM 的功能来帮助您的应用程序发展。

使用 Prisma Accelerate 提高应用程序性能

随着应用程序的扩展,您可能需要工具来有效地处理日益增长的流量。这通常涉及实施连接池来管理数据库连接以及缓存策略以减少数据库负载并提高响应时间。Prisma Accelerate 在单个解决方案中解决了这些需求,消除了设置和管理独立基础设施的需要。

Prisma Accelerate 对于部署到无服务器和边缘环境(也称为函数即服务)的应用程序特别有用,因为这些部署倾向于创建比传统长生命周期应用程序多几个数量级的连接。对于这些应用程序,Prisma Accelerate 具有从一开始就保护数据库并使您的应用程序在线的额外优势 无论您遇到多少流量.

尝试一下 Accelerate 速度测试 看看可能实现的功能。

通过连接池提高查询性能

将您的连接池放置在 15 个以上全球区域中的一个,最大限度地减少数据库操作的延迟。在无服务器和边缘环境中启用高性能分布式工作负载。

通过缓存减少查询延迟和数据库负载

在 300 多个全球存在点缓存查询结果。Accelerate 扩展了您的 Prisma 客户端,提供了对缓存模式(例如每个查询的 ttlswr)的直观且细粒度的控制。

通过托管基础设施处理扩展流量

扩展到每天数百万个查询而无需更改基础设施。有效地管理数据库连接并使用更少的资源为更多用户提供服务。

立即开始使用 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 正在构建和扩展我们的产品,以改善 Data DX 的各个方面,我们希望听到您的想法。加入我们的社区,了解我们产品的更多信息,如下所示。

Accelerate 和 Pulse 都通过 Prisma 客户端扩展 在 Prisma ORM 上构建。这打开了我们在 ORM 中无法包含的功能,例如全局优化缓存和实时数据同步。创建一个免费的帐户,并探索 Accelerate 和 Pulse 如何帮助您构建可扩展的高性能应用程序!

提高开发人员体验并不止步于 Accelerate 和 Pulse。Prisma 正在构建和扩展我们的产品,以改善 Data DX 的各个方面,我们希望听到您的想法。加入我们的社区,了解我们产品的更多信息,如下所示