Drizzle ORM กำลังจะถึง 1.0 · ORM สาย TypeScript ที่เขียน query ใกล้ SQL ต่างจาก Prisma ตรงไหน
Drizzle ORM เป็น ORM สาย TypeScript ที่ให้เขียนทั้ง schema และ query เป็นโค้ด TypeScript ล้วนในแบบที่ใกล้ SQL จริง และกำลังจะแตะเวอร์ชัน 1.0 ชวนทำความเข้าใจว่ามันคืออะไร ต่างจาก Prisma ตรงไหน และทำไมจังหวะใกล้ 1.0 ถึงน่าจับตาสำหรับคนที่กำลังเลือก ORM

Drizzle ORM คือเครื่องมือที่ช่วยให้เราสั่งงานฐานข้อมูล SQL ด้วยโค้ด TypeScript แทนที่จะต้องเขียนคำสั่ง SQL ดิบเองทุกครั้ง เครื่องมือกลุ่มนี้เรียกรวมๆ ว่า ORM ตอนนี้ Drizzle กำลังเข้าใกล้เวอร์ชัน 1.0 ซึ่งจะเป็นเวอร์ชันเสถียรตัวแรกที่ถือว่าพร้อมใช้งานจริงเต็มตัว ล่าสุดอยู่ในขั้น release candidate หรือเวอร์ชันที่เกือบสมบูรณ์แล้ว เหลือเพียงเก็บรายละเอียดก่อนปล่อยจริง
สิ่งที่ทำให้ Drizzle ต่างจาก ORM อื่นคือปรัชญาสั้นๆ ที่ว่า ถ้ารู้ SQL ก็เขียน Drizzle เป็น มันไม่พยายามสร้างชุดคำสั่งใหม่ขึ้นมาแทน SQL แต่ให้เราเขียน query ที่หน้าตาใกล้เคียงกับ SQL จริง อ่านแล้วดูออกทันทีว่าเบื้องหลังจะได้คำสั่ง SQL แบบไหน สำหรับ dev สายเว็บหรือแบ็กเอนด์ที่กำลังเลือก ORM อยู่ หรือคนที่ใช้ Prisma แล้วอยากรู้ว่ามีทางเลือกที่เบากว่าไหม นี่คือเครื่องมือที่ควรทำความรู้จักไว้ก่อน 1.0 จะมาถึงจริง
ถ้ารู้ SQL ก็เขียน Drizzle เป็น
หัวใจของ Drizzle อยู่ที่การให้เรานิยามทั้งโครงสร้างตาราง (schema) และคำสั่งดึงข้อมูล (query) เป็นโค้ด TypeScript ล้วน เรากำหนดว่าตารางมีคอลัมน์อะไร ชนิดข้อมูลแบบไหน เป็นออบเจกต์ใน TypeScript จากนั้น type ของข้อมูลทั้งหมดก็พร้อมให้เรียกใช้ได้ทันที โดยไม่ต้องผ่านขั้นตอนแปลงไฟล์แยกก่อน
ฝั่ง query นั้น Drizzle มีให้เลือกสองแบบตามลักษณะงาน
แบบแรกคือ SQL-like API ที่เขียนใกล้กับ SQL จริงมาก สั่ง select จากตาราง ใส่เงื่อนไข where แล้วเรียงลำดับ ต่อกันเป็นลำดับที่คนเขียน SQL อยู่แล้วจะคุ้นตาทันที ข้อดีของมันคือเราไม่ต้องไปเรียน API อีกชุดที่คิดคนละแบบกับ SQL
แบบที่สองคือ Relational API หรือที่เรียกย่อว่า RQB เอาไว้ดึงข้อมูลที่เชื่อมโยงกันหลายตารางแบบซ้อนกัน โดยไม่ต้องเขียน join เอง จุดที่น่าสนใจคือไม่ว่าจะขอข้อมูลซ้อนลึกแค่ไหน RQB จะแปลออกมาเป็น SQL query เดียวเสมอ จึงไม่เจอปัญหา N+1 ที่ ORM หลายตัวชอบยิงคำสั่งซ้ำๆ ทีละแถวจนฐานข้อมูลทำงานหนักเกินจำเป็น
เป็นแค่ไลบรารี ไม่ใช่กรอบบังคับ

อีกจุดยืนที่ Drizzle ชัดเจนคือมันไม่บังคับให้เราจัดโปรเจกต์ตามแบบของมัน ทีม Drizzle มองว่าเครื่องมือสาย Django หรือ Spring ที่หลายคนเหมารวมว่าเป็น ORM จริงๆ แล้วควรเรียกว่า data framework มากกว่า เพราะมันบังคับให้เราวางโครงทั้งโปรเจกต์ให้เข้ากับรูปแบบของมัน ส่วน Drizzle เลือกเป็นแค่ไลบรารีที่นำไปใช้กับโปรเจกต์ที่มีอยู่ได้เลย พร้อมชุดเครื่องมือเสริมแบบ opt-in ที่จะใช้หรือไม่ใช้ก็ได้ เอกสารทางการของ Drizzle ORM เรียกแนวทางแบบนี้ว่า headless ORM
อีกเรื่องที่ทำให้ Drizzle เบาคือมันประกาศว่าไม่มี dependency อื่นพ่วงมาเลยสักตัว ตัวมันจึงเล็กและดูแลง่ายกว่า
เรื่องฐานข้อมูล Drizzle ก็ไม่ผูกตัวเองไว้กับค่ายใดค่ายหนึ่ง มันทำงานผ่าน database driver มาตรฐานของแต่ละ dialect ไม่ได้สร้าง driver เฉพาะของตัวเองขึ้นมา ฐานข้อมูลที่รองรับครอบคลุมทั้งฐานข้อมูลหลักที่คนส่วนใหญ่ใช้อย่าง PostgreSQL · MySQL · SQLite ไปจนถึงฐานข้อมูลเฉพาะทางอย่าง SingleStore · MSSQL · CockroachDB
เพราะออกแบบมาให้เล็ก เบา และแยกย่อยตามแต่ละ dialect ตั้งแต่ต้น Drizzle จึงเข้ากันได้ดีกับงานสาย serverless และ edge ในงานกลุ่มนี้ ขนาดโค้ดทุกกิโลไบต์และเวลา cold start ทุกมิลลิวินาทีมีผลต่อความเร็วที่ผู้ใช้รู้สึกได้
ต่างจาก Prisma ตรงที่ไม่ต้อง generate

คำถามที่คนเลือก ORM ในโลก TypeScript มักถามคือ มันต่างจาก Prisma ยังไง จุดที่เปรียบเทียบได้ชัดเจนที่สุดคือเรื่องขั้นตอนการทำงานกับ schema
ฝั่ง Prisma เรานิยาม schema ลงในไฟล์เฉพาะนามสกุล .prisma ซึ่งเป็นภาษาเฉพาะของมันเอง จากนั้นต้องรันคำสั่ง prisma generate เพื่อสร้าง client ขึ้นมาก่อน ถึงจะนำ type ไปใช้ในโค้ดได้ และทุกครั้งที่แก้ schema ก็ต้อง generate ใหม่อีกรอบ
ฝั่ง Drizzle ไม่มีขั้นตอนนั้นเลย เพราะ schema คือโค้ด TypeScript อยู่แล้ว พอแก้ปุ๊บ type ก็อัปเดตตามทันที ไม่มีไฟล์ schema แยกอีกชั้นและไม่มีขั้น generate มาคั่นระหว่างทาง
อีกมุมที่ต่างคือหน้าตาของ query เอง Drizzle จงใจให้เขียนใกล้ SQL ขณะที่ Prisma ให้เราเรียนชุดคำสั่งของมันเองที่ออกห่างจาก SQL ไป ทั้งสองแนวทางมีข้อดีคนละทาง ไม่ได้มีตัวเลือกไหนถูกหรือผิดเสมอไป
ข้อดีเรื่องความเบาและรูปแบบ query ที่ใกล้ SQL ของ Drizzle ก็มีข้อจำกัดอยู่เหมือนกัน มันเหมาะกับคนที่พอรู้ SQL อยู่บ้าง เพราะยังให้เราเห็น SQL ตรงๆ ถ้ายังไม่เคยแตะ SQL เลย ก็อาจต้องใช้เวลาทำความเข้าใจมากกว่าการใช้เครื่องมือที่จัดการรายละเอียดให้มากกว่า
ทำไม 1.0 ถึงน่าจับตาตอนนี้
ที่บอกว่า Drizzle กำลังจะถึง 1.0 ไม่ได้แปลว่ามีฟีเจอร์ใหญ่ๆ เปิดตัวใหม่ให้ใช้งาน ตัว rc.4 เองเน้นไปที่การแก้บั๊กและรื้อโครงสร้างภายในเป็นหลัก มันจึงเป็นสัญญาณบอกว่าทีมกำลังเก็บรายละเอียดให้เรียบร้อยก่อนปล่อยเวอร์ชันเสถียร มากกว่าจะเป็นการเปิดตัวของใหม่
ความน่าสนใจจึงอยู่ที่จังหวะมากกว่าตัวฟีเจอร์ ORM ที่ยังเป็นเวอร์ชัน 0.x มักทำให้คนกังวลว่า API อาจเปลี่ยนได้ตลอด การเข้าใกล้ 1.0 จึงเป็นสัญญาณว่าทีมพร้อมจะคงความเสถียรของ API เอาไว้ สำหรับคนที่ลังเลจะเอา Drizzle ไปใช้ในงานจริงเพราะกลัวของยังไม่นิ่ง นี่คือจังหวะที่น่าเริ่มมองอย่างจริงจัง
ถ้าอยากลองของจริง จุดเริ่มที่ง่ายที่สุดคือเข้าไปที่หน้าเอกสารของ Drizzle ORM แล้วลองนิยามตารางสักตารางในไฟล์ .ts ประกาศคอลัมน์กับชนิดข้อมูลให้ครบ จากนั้นเขียน select ดึงข้อมูลออกมาดูสักคำสั่ง พอเห็นภาพแล้วค่อยขยับไปใช้ query กับฐานข้อมูลจริงของโปรเจกต์
ในวันที่เครื่องมือ AI เข้ามาช่วยเขียนโค้ดให้มากขึ้นเรื่อยๆ ORM ที่ยังให้เราเห็น SQL ตรงๆ กลับยิ่งมีค่า เพราะคนที่ยังอ่าน query ของตัวเองออก คือคนที่ยังคุมสิ่งที่เครื่องสร้างให้ได้อยู่
ที่มา:
- เอกสาร Drizzle ORM — Why Drizzle? (docs) จาก Drizzle ORM
- release notes Release v1.0.0-rc.4 · drizzle-team/drizzle-orm จาก Drizzle ORM



