Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Redis

เพิ่มประสิทธิภาพ Prisma ORM ด้วย Upstash Redis Caching

ในบล็อกโพสต์ก่อนหน้าของฉัน เราได้กล่าวถึงประโยชน์ของการแคช เทคนิคการแคชทั่วไป วิธีแคชข้อมูล SQL โดยใช้ Upstash Redis ในตัวอย่างโค้ดต่างๆ

ขณะที่เราตรวจสอบรายละเอียดและประโยชน์ของการแคชคำสั่ง SQL ด้วย Upstash Redis ตอนนี้เราสามารถไปต่อและดูการดำเนินการบางอย่างได้แล้ว เพื่อจุดประสงค์นี้ เราสามารถเริ่มต้นด้วย ORM ที่ใช้กันทั่วไปอย่าง Prisma เพื่อเริ่มดูว่าการแคชด้วย Upstash Redis ทำงานอย่างไรสำหรับการสืบค้นฐานข้อมูล

ในบล็อกโพสต์นี้ เราจะสำรวจวิธีผสานรวม Upstash Redis เข้ากับ Prisma เพื่อแคชการสืบค้นโดยใช้เทคนิคการยกเว้นแคช ลดภาระฐานข้อมูล และเพิ่มประสิทธิภาพแอปพลิเคชัน

ปริซึมคืออะไร?

ก่อนที่จะตั้งค่า Prisma เรามาตรวจสอบคำศัพท์และสิ่งที่ Prisma ทำกันก่อน

ประการแรก Prisma คือเครื่องมือ Object Relational Mapper (ORM) ที่ให้อินเทอร์เฟซระหว่างแอปพลิเคชันและฐานข้อมูล

ORM เป็นเทคนิคการเขียนโปรแกรมที่ช่วยให้นักพัฒนาโต้ตอบกับฐานข้อมูลโดยใช้โค้ดเชิงวัตถุระดับสูง แทนที่จะเขียนคำสั่ง SQL แบบดิบ พูดง่ายๆ ก็คือ มีสะพานที่เชื่อมต่อฐานข้อมูลเชิงสัมพันธ์และภาษาการเขียนโปรแกรมเชิงวัตถุ

ORM แมปตารางฐานข้อมูลกับคลาสหรือโมเดลภาษาเชิงโปรแกรม แต่ละแถวในตารางสอดคล้องกับอินสแตนซ์ของคลาส โดยพื้นฐานแล้วนี่คือการสร้างแบบจำลองข้อมูลที่เราทำในแอปพลิเคชันของเราที่เขียนด้วยภาษาเชิงวัตถุ ORM สร้างสิ่งนี้ให้เราและมอบวิธีการแทนการเขียนคำสั่ง SQL โปรแกรมเมอร์สามารถเรียกใช้เมธอดบนอ็อบเจ็กต์หรือคลาสเพื่อดำเนินการ CRUD ได้

ตัวอย่างเช่น การสืบค้น 05 ตารางใน SQL ดิบมีลักษณะดังนี้:

SELECT * FROM users WHERE id = 1;

เมื่อใช้ ORM แบบสอบถามเดียวกันอาจมีลักษณะดังนี้:

const user = await user.findUnique({ where: { id: 1 } });

ดังนั้น ORM ทำงานที่จำเป็นในการโต้ตอบกับฐานข้อมูลและทำให้ข้อมูลที่ดึงเข้าไปในโปรแกรมที่ดำเนินการสามารถใช้งานได้ในโค้ด ทำให้นักพัฒนามีความสะดวกอย่างยิ่ง

Prisma เป็นหนึ่งใน ORM ที่ใช้กันทั่วไปและใช้งานง่ายที่สุดในแอปพลิเคชันซอฟต์แวร์

ต่อไปนี้เป็นตัวบ่งชี้บางประการว่าทำไม Prisma จึงเป็นตัวเลือก ORM ที่ดี:

  • ข้อความค้นหาที่ปลอดภัย :Prisma จะสร้างไคลเอ็นต์ TypeScript โดยอัตโนมัติตามสคีมาฐานข้อมูลของคุณ เพื่อให้มั่นใจว่าคุณจะตรวจพบข้อผิดพลาดในระหว่างการพัฒนาแทนที่จะตรวจพบขณะรันไทม์

  • การสร้างแบบจำลองข้อมูลแบบง่าย :ด้วย 10 คุณสามารถกำหนดโครงสร้างฐานข้อมูลของคุณโดยใช้ไวยากรณ์การประกาศ ซึ่ง Prisma แปลเป็นการเรียก SQL หรือ API ที่จำเป็น เราจะดูตัวอย่างวิธีเขียนโมเดลในไฟล์นี้เพื่อสร้างตารางผ่าน Prisma

  • การสนับสนุนหลายฐานข้อมูล :Prisma ทำงานร่วมกับฐานข้อมูลยอดนิยม เช่น PostgreSQL, MySQL, SQLite, MongoDB และอื่นๆ คุณสามารถค้นหาฐานข้อมูลได้ในเอกสาร Prisma

  • การจัดการการย้ายข้อมูล :Prisma มีระบบการย้ายข้อมูลที่ใช้งานง่ายเพื่อให้สคีมาฐานข้อมูลของคุณซิงค์กับโค้ดเบสของคุณ

Prisma ยังมี CLI และ Studio (GUI ฐานข้อมูลบนเว็บ) เพื่อให้การจัดการฐานข้อมูลง่ายยิ่งขึ้น

การตั้งค่าพริสม่า

ตอนนี้เรามาดูกันว่ามีการติดตั้งอย่างไรและทำงานอย่างไรในแอปพลิเคชัน

เนื่องจากจุดสนใจหลักของโพสต์บนบล็อกนี้คือการแคชคำค้นหา Prisma เราจึงสามารถใช้ฐานข้อมูล SQLite ที่เรียบง่ายในท้องถิ่นเพื่อดำเนินการบางอย่างของ Prisma เพื่อสาธิตการทำงานของ Prisma ได้

เราควรติดตั้ง 24 อันดับแรกเพื่อให้แน่ใจว่าแอปของเราสามารถเชื่อมต่อและโต้ตอบกับฐานข้อมูล SQLite ได้ ดังที่ได้กล่าวไปแล้ว การตั้งค่า SQLite เป็นเพียงการสาธิตวิธีการทำงานของ Prisma กับฐานข้อมูลเท่านั้น หากคุณมีการตั้งค่าอื่นๆ คุณสามารถค้นหาการผสานรวมประเภทฐานข้อมูลของคุณกับ Prisma ได้ในเอกสาร Prisma

ไปที่ไดเร็กทอรีโปรเจ็กต์ในเทอร์มินัลและติดตั้ง SQLite ที่นี่

npm install sqlite3

ตอนนี้เราควรติดตั้ง Prisma CLI เพื่อให้สามารถใช้ Prisma ORM ได้

npm install prisma --save-dev

จากนั้นเริ่มต้น Prisma การเริ่มต้นนี้จะสร้าง 37 ไดเรกทอรีที่มี 49 ไฟล์. 56 ไฟล์คือที่ที่คุณกำหนดโครงสร้างฐานข้อมูลของคุณ (โมเดล ฟิลด์ ฯลฯ)

npx prisma init

ตอนนี้เราจะกำหนดสคีมาของ Prisma มาเปิด 69 กันดีกว่า ไฟล์ในตัวแก้ไข

ไฟล์นี้ประกอบด้วยสามบล็อก บล็อกแรกคือตัวสร้างที่กำหนดค่า Prisma เพื่อสร้างไคลเอ็นต์ที่ใช้ในแอปพลิเคชัน Node.js ของคุณ ประการที่สองคือบล็อกแหล่งข้อมูล ในบล็อกนี้ เราจะให้ข้อมูลที่จำเป็นเกี่ยวกับฐานข้อมูลของเราเพื่อให้ Prisma เชื่อมต่อได้ บล็อกสุดท้ายประกอบด้วยโมเดลฐานข้อมูลที่เราสามารถกำหนดตารางในฐานข้อมูลของเราและฟิลด์ต่างๆ รวมถึงประเภทข้อมูลและข้อจำกัด

มาดูตัวอย่างด้านล่าง

generator client {
 provider = "prisma-client-js"
}
datasource db {
 provider = "sqlite"
 url = env("DATABASE_URL")
}
model user {
 id Int @id @default(autoincrement())
 name String
 email String @unique
 age Int?
}

ดังที่เราเห็น เราให้ URL ของฐานข้อมูลโดยระบุประเภทของมัน อย่าลืมตั้งค่าตัวแปรสภาพแวดล้อม DATABASE_URL ในโปรเจ็กต์ของคุณ สำหรับการเชื่อมต่อฐานข้อมูลประเภทอื่น คุณสามารถตรวจสอบเอกสาร Prisma ได้ ในกรณีตัวอย่างของเรา เราสามารถตั้งค่าเป็น 76 ได้ .

นอกจากนั้น เรายังกำหนด 87 ตารางโดยการกำหนดคอลัมน์ด้วยประเภทและข้อจำกัด คุณสามารถสร้างโมเดลที่ซับซ้อนยิ่งขึ้นด้วยฐานข้อมูลประเภทต่างๆ ได้ตามที่คุณต้องการ แต่สำหรับการสาธิตนี้ เราสามารถเลือกใช้การตั้งค่าพื้นฐานนี้ได้

หากต้องการซิงค์สคีมาของเรากับฐานข้อมูลโดยการสร้างตารางที่จำเป็น เราควรรันคำสั่งการโยกย้าย 92 ธงเป็นชื่อให้กับการย้ายข้อมูลนี้ ทำให้ง่ายต่อการติดตามการเปลี่ยนแปลงสคีมา

npx prisma migrate dev --name init

ฐานข้อมูล SQLite ของเราพร้อม Prisma ORM พร้อมใช้งานแล้ว

การตั้งค่า Upstash Redis

นี่เป็นส่วนที่เร็วที่สุดที่จะเสร็จสมบูรณ์ เราทำขั้นตอนนี้พันครั้งแล้ว อย่างไรก็ตาม เราจะดำเนินการตามขั้นตอนอย่างรวดเร็วที่นี่เช่นกันเพื่อทำให้โพสต์บนบล็อกนี้เป็นคำแนะนำที่สมบูรณ์ตั้งแต่ต้น ใครก็ตามที่ทำตามขั้นตอนเหล่านี้แล้ว ก็สามารถข้ามไปยังขั้นตอนที่ต้องการได้

เราจะสร้างฐานข้อมูล Redis ผ่านคอนโซล Upstash

มาสร้างฐานข้อมูล Redis โดยคลิกปุ่ม "สร้างฐานข้อมูล" และทำตามขั้นตอนในโมดอลที่ปรากฏขึ้น

อย่าลืมเลือกแบบจำลองการอ่านของฐานข้อมูล Upstash Redis เมื่อเลือกขอบเขตของฐานข้อมูล คุณสามารถดูประโยชน์ของ Redis ทั่วโลกได้ในบล็อกโพสต์ก่อนหน้าของฉัน

เพิ่มประสิทธิภาพ Prisma ORM ด้วย Upstash Redis Caching

ฐานข้อมูล Redis พร้อมแล้ว สิ่งที่เหลืออยู่ในการตั้งค่า Upstash Redis ของเราคือการเริ่มต้นไคลเอ็นต์ Redis ในแอปพลิเคชันของเรา สำหรับสิ่งนี้ เราจะต้องติดตั้ง Upstash Redis SDK ก่อน

npm install @upstash/redis

จากนั้นเราควรปลายทางและรหัสผ่าน Redis ของเราจาก Upstash Console จากนั้น กำหนดค่าไคลเอ็นต์ Redis ในโค้ดที่เราจะเชื่อมต่อกับ Upstash Redis

การแคชแบบสอบถาม Prisma ด้วย Upstash Redis

ดังที่ฉันได้กล่าวไว้ก่อนหน้าในบล็อกนี้ เราจะใช้กลยุทธ์แบบยกเว้นแคช ในการทำเช่นนั้น เราจะตรวจสอบแคชก่อนว่ามีข้อมูลที่ร้องขอจากการสืบค้นที่กำหนดอยู่หรือไม่ ถ้ามี เราจะไปดึงมันมาจาก Upstash Redis และส่งคืน มิฉะนั้น เราจะสอบถามฐานข้อมูล SQL โดยใช้ไคลเอนต์ Prisma ที่สร้างขึ้นในส่วนด้านบน และเติมแคชด้วยข้อมูลที่ดึงมาจากฐานข้อมูล SQL

import { Redis } from '@upstash/redis';
import { PrismaClient } from "@prisma/client";
 
const prisma = new PrismaClient();
 
const redis = new Redis({
 url: '<UPSTASH-REDIS-ENDPOINT>',
 token: '<UPSTASH-REDIS-TOKEN>',
})
 
async function getUser(userId: string) {
 const cacheKey = `user:${userId}`;
 
 // Check cache
 const cachedUser = await redis.get(cacheKey);
 if (cachedUser) {
 console.log("Cache hit");
 return JSON.parse(cachedUser);
 }
 
 // Query database
 console.log("Cache miss");
 const user = await prisma.user.findUnique({
 where: { id: userId },
 });
 // Store in cache
 if (user) {
 await redis.set(cacheKey, JSON.stringify(user), { ex: 3600 }); // Cache for 1 hour
 }
 return user;
}

ตามที่เห็นในตัวอย่างนี้ 100 วิธีการที่มีพารามิเตอร์ที่กำหนดเงื่อนไขของการสืบค้นช่วยให้นักพัฒนาสามารถสืบค้นฐานข้อมูล SQL ในรูปแบบรหัสได้

ตามตัวอย่าง เราสามารถดึงข้อมูลผู้ใช้ทั้งหมดในตารางผู้ใช้โดยใช้ 119 ทำงานดังต่อไปนี้:

const user = await prisma.user.findMany();

บทสรุป

ในบล็อกโพสต์นี้ เราได้อธิบายวิธีการผสานรวม Prisma เข้ากับ Upstash Redis เพื่อแคชคำค้นหา Prisma

ทั้ง Prisma และ Upstash Redis นั้นค่อนข้างตรงไปตรงมาและใช้งานง่าย นอกจากสถาปัตยกรรมที่เป็นมิตรต่อนักพัฒนาแล้ว ยังมีประโยชน์อีกด้วย Prisma สามารถประหยัดเวลาในการพัฒนาได้มากมายด้วยคุณสมบัติการทำแผนที่ที่ช่วยให้สามารถจัดการฐานข้อมูลในรูปแบบการเข้ารหัสได้ การแคชคำค้นหา Prisma ด้วย Upstash Redis ยังช่วยลดเวลาแฝงของการเรียกข้อมูลได้อย่างมาก และลดภาระในฐานข้อมูล SQL หลักของแอปพลิเคชัน

ฉันหวังว่าบล็อกนี้จะช่วยคุณทุกคน!