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 ที่จำเป็นดังนี้
[gist id="be89ddca842404acea629d20e7facd0a" file="1.txt"]จากนั้นทำการสร้างไฟล์ 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