Prisma คืออะไร ?

database toolkit ที่เป็น open source ประกอบไปด้วย 3 ส่วนคือ

  • Prisma client คือเครื่องมือสำหรับสร้าง code ฝั่ง client แบบอัตโนมัติ (Node.js หรือ TypeScript)
  • Prisma migrate (experimental) คือการทำ data model และ database migration ในแบบ declarative
  • Prisma studio (experimental) เป็นระบบ GUI สำหรับดูและแก้ไขข้อมูลใน database

ที่น่าสนใจขึ้นไปอีกคือ Prisma client สามารถทำงานกับ API technology ต่าง ๆ ได้เช่น

  • REST
  • GraphQL
  • Thrift
  • gRPC

โดยที่ Prisma จะเข้ามาเติมเต็มในส่วนของ Data management

มีทั้งการใช้งาน database เช่นการใช้งาน ORM ต่าง ๆ
แต่ปัญหาของ ORM คือ ความซับซ้อนสูงขึ้น ตามระบบงานที่ใหญ่ขึ้น
ดังนั้นในแง่ของการดูแลยาว ๆ ไม่ดีแน่นอน

รวมทั้งเรื่องของ database migration ที่ไม่แยกออกไปจากเครื่องมือ
หรือใช้งานยาก
ทำให้ Prisma เข้ามาเติมเต็มในจุดนี้

ใน Prisma 2 จะมีความสามารถหลัก 2 ตัวคือ

1. Photon  คือเครื่องมือสร้าง database client code แบบอัตโมติ ที่สำคัญ Type-safe ด้วย

2. Lift คือเครื่องมือสำหรับ data model และ database migration

โดยเครื่องมือทั้งสองตัวเป็น command-line tool ทำงานแยกหรือรวมกันก็ได้
อยู่ที่ความต้องการของเราเลย

การเปลี่ยนแปลงของ Prisma จาก version 1 มา 2

โดยที่ Prisma core เขียนใหม่ด้วยภาษา Rust จากเดิมที่เขียนด้วยภาษา Scala
เหตุผลในการเปลี่ยนว่าด้วยเรื่อง 

  • การใช้ memory
  • ประสิทธิภาพการทำงานที่ดีขึ้น
  • ง่ายต่อการ deploy และ monitoring

อธิบายไปไม่เข้าใจเท่ากับลงมือทำ

ดังนั้นมาลองใช้งานง่าย ๆ กัน โดยระบบที่ลองทำคือ Node.js ปกติ
ประกอบไปด้วย

  • Express
  • Sqlite database

มาเริ่มกัน

ก่อนอื่นทำการสร้าง project

และติดตั้ง module ที่จำเป็นดังนี้

จากนั้นทำการสร้างไฟล์ schema ของ data ที่เราจะใช้งาน (Prisma schema)

อยู่ในไฟล์ ./prisma/schema.prisma

  • Database ที่ใช้งานคือ  Sqlite
  • ทำการออกแบบ model หรือ table ใน database มี 2 ตัวคือ User และ Post ซึ่งมีความสันพันธ์กันด้วย

เมื่อสร้าง schema เรียบร้อยแล้ว

ต้องทำการ generate Prisma client ขึ้นมาจาก schema นั่นเอง
ด้วยคำสั่งดังนี้

แต่ว่าสิ่งที่ยังขาดไปคือ database และ table ต่าง ๆ ใน Sqlite ยังไม่มีเลย

ดังนั้นจำเป็นต้องสร้างขึ้นมา
ขั้นตอนนี้ Prisma ก็ได้เตรียม Prisma migrate database มาให้
สามารถทำได้ทั้งโครงสร้าง table และ ข้อมูลเลย

การใช้งานง่ายมาก ๆ
สามารถ run migrate ด้วยการระบุไฟล์ schema เท่านั้นเอง ดังนี้

เมื่อทุกอย่างเรียบร้อย ก็นำมาใช้ร่วมกับระบบงานของเรา
ซึ่งผมพัฒนา RESTFul API ด้วย express ดังนี้

เพียงเท่านี้ก็สามารถนำ Prisma มาใช้ในส่วนของการจัดการข้อมูลแบบง่าย ๆ ได้แล้ว

ทั้งการออกแบบ model ข้อมูล
ทั้งการ generate client code
ทั้งการ migrate database
เป็นสิ่งที่ใช้งานได้ง่ายดีและมีประโยชน์ ลองใช้งานกันดูครับ

Source code ตัวอย่างอยู่ที่ Github::up1