Videos Supabase VS Firebase - Epic battle between the two

Description

This session offers a practical comparison of Supabase and Firebase, two popular platforms for building modern applications. The speakers, one representing each platform, delve into key features like data modeling, CRUD operations, authentication, authorization, business logic, storage, AI capabilities, real-time functionality, and pricing. Through code examples and insightful discussions, they highlight the strengths and weaknesses of each platform, helping you understand which might be the better fit for your specific needs. Whether you're a seasoned developer or just starting out, this comparative overview provides valuable insights into the world of Supabase and Firebase.

Chapters

  • Introduction: Supabase vs. Firebase in Thailand 0:00
  • Audience Poll: Firebase vs. Supabase Users 0:28
  • Round 0: Introductions - Firebase Overview & Ecosystem 1:00
  • Firebase's Key Features: Google Cloud Integration & Real-time Capabilities 2:35
  • Supabase Introduction: Open Source Firebase Alternative Built on Postgres 3:51
  • Supabase Architecture: Docker, APIs, and Open Source Nature 5:39
  • Supabase Community & Framework Support 6:44
  • Round 1: Data Modeling - Firebase's NoSQL (JSON) Structure 7:26
  • Firebase Firestore: Advanced NoSQL with Collections & Subcollections 8:19
  • Supabase Data Modeling: SQL & Relational Database with UI & Migrations 8:43
  • Data Modeling Comparison: Normalization vs. Read Optimization 10:07
  • Firebase's New Feature: SQL Data Connect (Preview) 11:12
  • Round 2: CRUD Operations - Firebase's Client-Side SDK & UI 12:07
  • Supabase CRUD: Client & Server-Side SDKs, Connection Pooling 13:04
  • Compound Queries: SQL Capabilities & Limitations in Firebase 14:37
  • Round 3: Authentication - Firebase's Simple Authentication with UI 16:21
  • Supabase Authentication: Similar to Firebase, Multiple Providers 17:04
  • Round 4: Authorization - Firebase's Robust Access Management with Rules 17:32
  • Supabase Authorization: Row Level Security & Policy Management 19:36
  • Round 5: Business Logic & Functions - Firebase Cloud Functions (Event-Driven) 20:51
  • Supabase Edge Functions: Deno Runtime & Flexible Use Cases 22:17
  • Round 6: Storage - Firebase Storage with Rules & Extensions 22:55
  • Supabase Storage: S3-Based with Buckets, CDN, and Transformations 23:34
  • Round 7: AI Capabilities - Firebase's Integration with Vertex AI & GenKit 24:22
  • Supabase AI: Vector Support (pgvector) & Edge Function Integrations 25:32
  • Round 8: Real-time Features - Supabase Real-time with Channels & Postgres 26:14
  • Round 9: Pricing - Firebase Realtime Database & Firestore Pricing 27:11
  • Supabase Pricing: Cloud & Self-Hosting Options 29:41
  • Conclusion: Winner & Audience Q&A 30:51
  • TLDR: When to Choose Supabase vs. Firebase 31:38
  • Speaker Introductions & Projects: Datascale & Hubql 33:22

Transcript

คำบรรยายต่อไปนี้อาจไม่ถูกต้องทั้งหมด หากคุณพบข้อผิดพลาดใดๆ คุณสามารถช่วยแก้ไขข้อผิดพลาดได้บน GitHub

Introduction: Supabase vs. Firebase in Thailand0:00

สวัสดีครับ

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

Audience Poll: Firebase vs. Supabase Users0:28

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

Round 0: Introductions - Firebase Overview & Ecosystem1:00

แต่เรามาเริ่มกันเลยดีกว่าครับ รอบแรก

เราทุกคนเป็นวิศวกร รอบที่ศูนย์ ใช่ครับ เราเริ่มที่ศูนย์ งั้นแนะนำตัวก่อนเลยครับ ผมขอเริ่มก่อนเลย ครับ ผมเป็นตัวแทนของ Firebase ในวันนี้ สำหรับรอบที่ศูนย์ของผม แค่อยากจะแนะนำเผื่อใครไม่เคยใช้ Firebase มาก่อนครับ ไปสไลด์ต่อไปได้เลยครับ Firebase คือ ecosystem ของ NoSQL จาก Google Cloud ครับ ผมแค่อยากจะแสดงให้เห็นว่า Firebase ecosystem เป็นยังไงบ้างครับ มันสามารถทำอะไรได้หลายอย่าง ตั้งแต่ storage, database ไปจนถึง analytics คุณสามารถเพิ่มสิ่งเหล่านี้ลงในแอปของคุณภายใน Firebase ได้ครับ และมีหลายอย่างที่เป็น all-in-one kit สำหรับ NoSQL database ครับ สไลด์ต่อไปครับ จุดสำคัญหลักๆ

ของ Firebase สำหรับผมคือ มันถูก integrated กับ ระบบ Google Cloud ครับ ถ้าคุณมาจาก Google Cloud มันก็เป็นอะไรที่ง่ายมากที่จะเลือกใช้ Firebase สำหรับแอปหลักของคุณ ไม่ใช่แค่แอปหลัก แต่มัน

อาจจะเป็นตัวเลือกที่ง่ายกว่าสำหรับคุณ ถ้า infrastructure เดิมของคุณ อยู่บน Google Cloud อยู่แล้ว คุณสามารถย้ายและ integrate เข้ากับ ระบบหลักและเป็นส่วนหนึ่งของ Firebase ได้ครับ มี Cloud Functions ซึ่งเป็น ตัวเชื่อมของทุกระบบ ดังนั้นเมื่อคุณจัดการข้อมูล ด้วย Firebase คุณสามารถใช้ Cloud Function เป็น logic หลักในการเชื่อม ระบบของคุณจากหลายๆ ระบบ จาก Firebase ไปยัง Cloud Server จาก Google Cloud ครับ สไลด์ต่อไปครับ โอเค และมีหลายอย่าง

Firebase's Key Features: Google Cloud Integration & Real-time Capabilities2:35

Ecosystem ของ Firebase นั้นใหญ่มากครับ คุณสามารถมี extension ได้จากการติดตั้งเพียงคลิกเดียว คุณสามารถ integrate เข้ากับ Firebase ของคุณได้เลย เมื่อ event ถูก trigger มันจะ execute หนึ่งใน function เหล่านี้ และคุณสามารถมีแบบสำเร็จรูปได้ นอกจากนี้ยังมีความสามารถด้าน GenAI มีทั้ง Vertex AI และ GenKit เป็นตัวใหม่ และ Gemini for Firebase คุณสามารถใช้ Gemini ภายใน Firebase ได้ง่ายขึ้นครับ และสิ่งที่อยากจะพูดถึง Firebase คือ เมื่อคุณมี traditional backend service ส่วนใหญ่ เวลาที่คุณมี backend คุณจะมี server และคุณจะ สร้าง API เพื่อเรียก database และเมื่อคุณมี Firebase มันไม่ได้กำจัด backend ไป แต่ทำให้ชีวิตคุณง่ายขึ้น คุณไม่จำเป็นต้องสร้าง backend API ตลอดเวลา คุณสามารถใช้ client app เรียกมันจาก SDK และเชื่อมต่อ กับ Firebase ได้ง่ายขึ้น คุณสามารถทำ CRUD ได้ง่ายขึ้น และนั่นสามารถลดงานในการสร้าง backend ของคุณได้ ครับ และจุดเด่นอีกอย่างของ Firebase คือ real-time feature คุณสามารถสร้าง real-time subscription เมื่อ database อัปเดต แอปของคุณทั้งหมด แอป client ของคุณทั้งหมดจะ ถูกอัปเดตโดยไม่ต้อง refresh หน้าเว็บหรือ reload แอป และเมื่อมีคนอัปเดต มันก็จะ sync กันทั้งหมดครับ

Supabase Introduction: Open Source Firebase Alternative Built on Postgres3:51

สรุป Firebase เป็น 3 ข้อหลักๆ สำหรับผมนะครับ

ข้อแรกคือ real-time feature และข้อที่สองคือ event driven เมื่อคุณอัปเดต database มันจะ trigger cloud function คุณสามารถ listen และ subscribe event ได้ง่ายขึ้น และ NoSQL ฟีเจอร์หลักคือถูกสร้างมาเพื่อการอ่านที่ optimized ถ้าคุณต้องการประสิทธิภาพการอ่านที่ดี

มันจะทำให้แอปของคุณเร็วขึ้น ทีนี้เรามาต่อกันที่ Supabase ครับ โอเค ขอบคุณครับภูมิ! ลองดูนะครับ เรามาดูกันว่า Supabase มีอะไรบ้าง Supabase พวกเขาเคลมตัวเองว่าเป็น open source alternative ของ Firebase ดังนั้นคุณอาจจะได้ยินว่า มีฟีเจอร์บางอย่างที่ซ้อนทับกับ Firebase และนั่นก็เป็นเรื่องจริง Firebase เองก็มี database เหมือนกัน เช่นเดียวกับ Supabase ซึ่งสร้างบนฐานของ Postgres database ใช่ไหมครับ และฟีเจอร์ทั้งหมด สามารถ implement ได้ ไม่ต่างจากการใช้งาน Postgres database ทั่วไป ดังนั้น extension หรืออาจจะถูกสร้างเป็น API มีฟีเจอร์ต่างๆ เช่น authentication, API มี edge function และเราจะลงลึก ในฟีเจอร์ต่างๆ ในภายหลัง ฟีเจอร์หลักๆ ของ

Supabase ถ้าคุณถามใครสักคน หรือถามผม คุณสามารถ ทำงานได้เร็วมากจนสามารถสร้างความประทับใจให้กับ CEO ของคุณได้ บางทีคุณอาจจะเป็น startup เล็กๆ และต้องการพัฒนาอย่างรวดเร็ว Supabase อาจเป็นตัวเลือกที่ดี เพราะคุณสามารถ ทำงานได้เร็วขึ้น เพราะคุณจะได้รับ ฟีเจอร์มากมายพร้อมใช้งาน และคุณสามารถสร้างความประทับใจให้กับหัวหน้าของคุณได้ ใช่ไหมครับ ดังนั้นมันจึงมีประโยชน์มาก ไปต่อเลยครับ โอเค

Supabase Architecture: Docker, APIs, and Open Source Nature5:39

Supabase นั้นใช้ Docker เป็นพื้นฐาน มันจะ expose API หลายๆ ตัว API สำหรับบริการและฟีเจอร์ต่างๆ ที่เรา จะพูดถึงในภายหลัง มันใช้ Kong และ Kong จะ route ไปยัง service ต่างๆ ที่ทำงานใน Docker ดังนั้นพวกมันจึงเป็น container ที่แตกต่างกัน และทั้งหมดใช้ Postgres เชื่อมต่อกับ database ใน Postgres Supabase เป็น open source ผมคิดว่านั่นเป็นข้อแตกต่างหลักๆ กับ Firebase มันเป็น open source อย่างสมบูรณ์ ทุกอย่างที่ Supabase ทำ เป็น open source เว็บไซต์ของพวกเขา สิ่งที่พวกเขาทำ เกมที่พวกเขาทำ meetup ที่พวกเขาทำ ทุกอย่างเป็น open source ดังนั้นคุณสามารถตรวจสอบได้ คุณสามารถไปที่ Supabase organization ใน GitHub และดูได้เลย และผมได้คุยกับไทวันนี้ เขาบอกผมว่าถ้าคุณติดปัญหา Supabase บางทีคุณก็แค่อ่านโค้ด บางครั้งมันค่อนข้างมีประโยชน์ในการหาคำตอบและรับความช่วยเหลือ คุณสามารถอ่านโค้ดด้วยตัวเอง และอาจจะหาวิธีปรับปรุง หรือแก้ไขได้ โอเค ต่อไป Supabase ทำงานกับ

Supabase Community & Framework Support6:44

framework หลายๆ ตัว ไม่ใช่แค่ JavaScript framework แต่ยังมี framework อื่นๆ เช่น Flutter และอื่นๆ อีกมากมาย ดังนั้นคุณสามารถใช้ Supabase และ ใช้ SDK ของพวกเขาเพื่อเชื่อมต่อและใช้งานได้ พวกเขามี community ที่แข็งแกร่ง คุณจะเห็นว่าพวกเขามี contributor มากกว่า 1000 คน มีคนจำนวนมาก contribute ให้กับ repository ทุกวัน ดังนั้นมันจึงเป็นการพัฒนาที่ขับเคลื่อนโดย community และพวกเขามีโครงการที่เรียกว่า Supasquad คุณอาจจะลองพิจารณา เข้าร่วม ดูที่เว็บไซต์ของพวกเขา และไปที่ Supasquad บางทีคุณอาจจะเป็น contributor ครั้งแรก หรือเป็นส่วนหนึ่งของ event ที่พวกเขาจัด เป็นโอกาสสำหรับคุณที่จะเป็นส่วนหนึ่งของ community นี้ โอเค

Round 1: Data Modeling - Firebase's NoSQL (JSON) Structure7:26

รอบต่อไป รอบที่หนึ่ง รอบต่อไปจะเป็น

เกี่ยวกับ data modeling เราจะพูดถึง database ผมจะส่งต่อให้ภูมิครับ เราจะเปรียบเทียบแบบ สั้นๆ ให้คุณดู เราจะแสดง โค้ดและ screenshot ของ data model Database ของ Firebase อย่างที่เรารู้กัน มันไม่ใช่แค่ SQL เราใช้โครงสร้างข้อมูลแบบ key-value ดังนั้นมันจึงเป็นข้อมูล JSON ใน Firebase แต่มันก็มีอะไรมากกว่านั้น เรามี collection และ สิ่งต่างๆ ที่รองรับฟีเจอร์ รองรับ filter สิ่งสำคัญคือ real-time database

มันง่ายมาก เมื่อคุณเก็บข้อมูล JSON คุณจะมี node ที่ซ้อนกันได้ และอื่นๆ และคุณสามารถตัดสินใจได้ว่า คุณต้องการ structured data ใน รูปแบบ JSON แบบง่ายๆ หรือฟีเจอร์ขั้นสูงจาก Firebase พวกเขามี Firestore ไปสไลด์ต่อไป Firestore นั้น

Firebase Firestore: Advanced NoSQL with Collections & Subcollections8:19

ขั้นสูงกว่า มันเก็บข้อมูลใน collection และคุณสามารถมี sub-collection และคุณสามารถจัดการข้อมูลได้มากขึ้นด้วยฟีเจอร์ขั้นสูง อันนี้คล้ายกับ MongoDB ในแง่ของ Firestore ดังนั้นคุณสามารถทำ filter ที่ซับซ้อนมากขึ้น และยังคงมี ความสามารถด้าน real-time เช่นกัน ไปต่อที่ Supabase ครับ

Supabase Data Modeling: SQL & Relational Database with UI & Migrations8:43

Supabase อย่างที่ผมได้กล่าวไป มันใช้ Postgres เป็นพื้นฐาน ถ้าคุณเคยทำงานกับ Postgres หรือ SQL database มาก่อน อันนี้จะคุ้นเคย ผมเชื่อว่าอันนี้อาจจะเล็กไปหน่อย แต่ทางซ้ายมือ พวกเขามี dashboard ดังนั้นเมื่อใดก็ตามที่คุณรัน Supabase แม้แต่แบบ local พวกเขาจะให้ dashboard และ UI ดังนั้นแม้แต่ no code สมมติว่าคุณไม่ชอบการเขียนโค้ด ผมไม่แน่ใจ บางทีคุณอาจจะชอบ คุณจะใช้ UI ในการสร้าง table คุณสามารถกำหนด database schema คุณสามารถใช้ dashboard ของพวกเขา หรือคุณสามารถใช้โค้ด ซึ่งใช้ SQL migration ถ้าคุณเคยทำงานกับ SQL คุณอาจจะรู้ว่าคุณสามารถสร้าง table คุณสามารถเปลี่ยนแปลง schema ของคุณได้ คุณจะใช้ migration คุณสามารถใช้ SQL ธรรมดาได้ แน่นอนว่ามันเป็นแค่ Postgres หรือคุณใช้ Prisma หรือ library อื่นๆ ที่คุณ

ชอบในการจัดการ database หรือ Postgres migration ของคุณ

โอเค แล้วคุณก็สร้าง schema แล้วคุณต้องอธิบายมันใช่ไหม ปกติคุณจะจบลงด้วย SQL schema ที่ปกติจะใช้

foreign key และ relationship และนี่คือสิ่งที่แตกต่าง ถ้าเราเปรียบเทียบกับ Firebase ซึ่งเป็น NoSQL database แนวคิดอาจจะแตกต่างกันมากในแง่ของวิธีที่คุณ สร้างแอปพลิเคชัน ดังนั้นนี่เป็นเพียงตัวอย่างเล็กๆ น้อยๆ ว่า database schema ของคุณอาจมีลักษณะอย่างไร

Data Modeling Comparison: Normalization vs. Read Optimization10:07

สรุปแนวคิด ผมคิดว่า Supabase มาจาก โลกของ normalization ดังนั้นคุณต้องการ data integrity คุณไม่ต้องการ duplicate ข้อมูลของคุณ แต่ในทางกลับกัน Firebase เป็น NoSQL บางครั้งคุณต้อง duplicate ข้อมูล คุณต้องการ optimize สำหรับการอ่าน แต่สำหรับการเขียน คุณต้อง เขียนหลายครั้ง บางครั้งคุณต้องใช้ cloud function เพื่อเขียนข้อมูลลงในหลายๆ ที่ นั่นคือความยืดหยุ่นของโครงสร้างข้อมูลนี้ แต่มันอาจมีข้อจำกัดในความสามารถในการ query ดังนั้นเมื่อคุณต้องการทำ complex query Supabase สามารถทำได้มากกว่าโดยการใช้ภาษา SQL แต่ถ้าคุณต้องการใช้ NoSQL คุณต้อง คิดให้ดีก่อนที่จะตัดสินใจเลือกโครงสร้างข้อมูลของคุณ ใน NoSQL และสิ่งหนึ่งที่ผมอยากจะแสดงให้เห็น

คือบางคนยังคงใช้ SQL ใช่ไหมครับ แต่บางคนอาจยังคงเก็บ JSON ใน SQL ดังนั้นผมคิดว่า บางครั้งเราอาจจะผสมผสาน สองอย่างนี้เข้าด้วยกัน และอยากจะแนะนำสิ่งใหม่

Firebase's New Feature: SQL Data Connect (Preview)11:12

Firebase ไม่ได้มีแค่ SQL แต่เรามี

สไลด์ต่อไปครับ ตอนนี้เรามี SQL feature แล้ว คุณสามารถใช้ได้ เพราะ Google Cloud มี Cloud SQL ใช่ไหมครับ ดังนั้นพวกเขาจึงแนะนำฟีเจอร์ใหม่ที่เรียกว่า Firebase Data Connect คุณสามารถเชื่อมต่อ Firebase ของคุณกับ Cloud SQL ที่รองรับ Postgres ใน backend แต่พวกเขาสร้างมันให้ เป็นแพลตฟอร์มเดียวกัน ดังนั้นตอนนี้มันมีอยู่ใน Firebase ในโหมด preview ไปสไลด์ต่อไปได้เลยครับ อันนี้แค่อยากจะแสดงภาพรวมคร่าวๆ ของ Firebase SQL Data Connect คุณกำหนดวิธีการเชื่อมต่อ สร้างข้อมูลของคุณ และมันจะเปลี่ยนอันนี้เป็น DDL schema โดยอัตโนมัติ และ

มันจะมี type-safe SDK สำหรับคุณในการสร้าง database คล้ายกับ GraphQL ครับ

Round 2: CRUD Operations - Firebase's Client-Side SDK & UI12:07

แค่นั้นแหละครับ โอเค รอบสอง CRUD

เรามี database แล้ว งั้นมาทำ CRUD ต่อเลย ครับ ไปต่อเลยครับ อันนี้จาก Firebase ผมคิดว่าฟีเจอร์หลักๆ ของ Supabase และ Firebase ฟีเจอร์นี้ส่วนใหญ่จะเหมือนกัน ในแง่ที่คุณไม่ต้องเขียน API ไปยัง backend และคุณสามารถใช้ SDK จากฝั่ง client ได้ คุณสามารถใช้แค่ DB collection อย่างในตัวอย่างนี้ คุณสามารถเรียกใช้งาน cities แล้วดึง doc ของ SF ออกมาได้ และอันนี้สามารถทำได้ทั้งหมดในฝั่ง client ดังนั้นมันจึงสะดวกสำหรับคุณในการอ่านและเขียน ข้อมูลไปยัง database ด้วยวิธีนี้ และ พวกเขายังมี UI ให้ด้วย ดังนั้นเมื่อคุณมี collection แบบนี้ คุณสามารถใช้ filter และลองเงื่อนไขต่างๆ ได้ พวกเขาจะให้ code snippet แก่คุณ และถ้าไม่มี พวกเขาสามารถให้ code snippet แก่คุณเพื่อลองใช้ได้ โอเค

Supabase CRUD: Client & Server-Side SDKs, Connection Pooling13:04

Supabase ก็มีวิธีการที่คล้ายกัน พวกเขามี SDK ในภาษาต่างๆ อันนี้เป็น JavaScript ทางซ้ายมือ คุณจะเห็นวิธี read

มันเป็น functional ใช่ไหมครับ คุณอาจจะคุ้นเคยกับ Prisma หรือ SDK หรือ ORM อื่นๆ พวกมันทำงานคล้ายกันมาก คุณกำหนด table ของคุณ คุณจะเลือก field หรือ column ที่คุณต้องการ แล้วคุณก็มี filter คุณสามารถใช้ equals หรือ filter อื่นๆ ที่คุณต้องการ คุณสามารถใช้มันใน SDK ได้ เช่นเดียวกับการอัปเดต มันเป็นวิธีการที่คล้ายกันมาก แทนที่จะใช้ select คุณจะ ใช้ update function และคุณสามารถ interact กับ database ได้ อีกครั้ง อันนี้คล้ายกับ Firebase คุณสามารถใช้มันในฝั่ง client ได้ หรือถ้าคุณใช้ React ซึ่งเป็นที่นิยมในตอนนี้ คุณสามารถใช้มันได้โดยตรงใน React บน server component เช่น พวกเขายังมี managed connection อยู่แล้ว ดังนั้นคุณจะได้ connection pooling เช่น กับ Postgres และสามารถทำ HTTP connection ไปยัง Postgres database ของคุณได้ ดังนั้นมันจึงยืดหยุ่นมาก ที่คุณต้องการใช้ ดังนั้นนั่นคือวิธีที่คุณสามารถ interact กับ Supabase database ได้ ผมเห็น JSON ตรงนี้ สไลด์ก่อนหน้านี้ โอ้ใช่ นั่นเป็นตัวอย่าง วิธีการอ่าน JSON มันเป็น nested field ตรงนี้ ที่อยู่และรหัสไปรษณีย์ เราสามารถทำ JSON ใน SQL ได้ใช่ไหม ใช่ครับ ถูกต้องๆ งั้นมาพูดถึง compound query กัน

Compound Queries: SQL Capabilities & Limitations in Firebase14:37

ผมได้พูดถึงความสามารถของ SQL ไปแล้ว ดังนั้นเมื่อคุณจัดการข้อมูลในรูปแบบ structured มันจะ advanced กว่า คุณสามารถทำ advanced query ได้ แต่สำหรับ Firebase มันมีข้อจำกัด ที่ filter ได้แค่ตาม key กับ value ข้อจำกัดหลักๆ ของ Firebase คือคุณไม่สามารถทำ query ที่ใช้การคำนวณได้ เช่น หาร้านอาหารที่มี rating หารด้วยราคา มากกว่า 1.5 นี่คือ SQL query คุณไม่สามารถทำแบบนี้ ใน Firebase ได้ คุณต้องการคำนวณค่าล่วงหน้า เพื่อที่คุณจะสามารถ query ค่านี้ได้ ในอนาคต ดังนั้นมันจะมี ในสไลด์ถัดไป สำหรับ Supabase คุณ

สามารถทำ query แบบนี้ได้ แต่ใน Firebase คุณต้องคำนวณค่า ratio นี้ล่วงหน้า และคุณสามารถ filter อันนี้ได้อีกครั้งในอนาคต ดังนั้นมันจึง optimize สำหรับความเร็ว และคุณสามารถ ลดความซับซ้อนของ query ของคุณได้ คุณไม่ต้อง จัดการอันนี้ในฝั่ง client แต่มันต้องแลกมาด้วย ความซับซ้อนในการเขียนข้อมูล ใช่ครับ

มีหลายวิธีในการจัดระเบียบข้อมูลของคุณใน NoSQL คุณสามารถทำเป็น nested แบบนี้ หรือเป็น flat data แต่คุณต้องคิดถึง composite index ด้วย เพราะ เนื่องจากเราไม่มี SQL query เราไม่มี relation คุณต้องคิดถึงวิธีที่คุณจะ index key ของคุณ และวิธีที่คุณจะ ทำให้ key สามารถ sort และ filter ได้ ผมคิดว่า Firebase ก็มีฟีเจอร์

ที่คุณสามารถสร้าง composite key บน dashboard ของคุณได้

Round 3: Authentication - Firebase's Simple Authentication with UI16:21

ไปต่อกันที่ authentication ครับ โอเค Firebase

ผมคิดว่าทุกคนน่าจะรู้ว่า Firebase ทำ authentication ได้ง่ายมาก เรื่อง authentication พวกเขาเป็นที่รู้จักกันดี มานานแล้ว พวกเขามี Google Sign In with Google เป็นวิธีที่ใช้กันมากที่สุด เมื่อคุณ sign in คุณจะ เห็นรายชื่อผู้ใช้ใน UI dashboard คุณจะมี user ID และเมื่อคน sign in คุณจะ มี metadata ของผู้ใช้นั้นด้วย

โค้ดง่ายมาก คุณสามารถ sign in ด้วย provider และคุณสามารถ sign in และ sign out ได้ จาก frontend โอเค เรามาดู Supabase

Supabase Authentication: Similar to Firebase, Multiple Providers17:04

authentication กันบ้าง ผมคิดว่ามันคล้ายกับ Firebase มาก มันง่ายมาก คุณสามารถใช้ function เพื่อ sign in คุณสามารถใช้ provider ต่างๆ ได้ เช่น email, password, OTP คุณสามารถมี MFA, anonymous login และสิ่งใหม่ที่คุณสามารถใช้ได้คือ

Firebase Authentication ใน Supabase เย้ โอเค บางทีอาจจะเป็นลูกค้า Firebase ใช่ไหมครับ ไม่แน่ใจ โอเค

Round 4: Authorization - Firebase's Robust Access Management with Rules17:32

รอบต่อไป authorization คุณจัดการ security หรือ การเข้าถึงข้อมูลของคุณอย่างไร ผมคิดว่า Firebase มีจุดแข็งในเรื่องนี้ เมื่อคุณเริ่มต้น คุณกำหนด ข้อมูลของคุณใน JSON ใช่ไหมครับ คุณสามารถใช้ common expression language คุณสามารถกำหนดได้ว่าผู้ใช้ สามารถเข้าถึง node นี้ได้อย่างไร ในระดับใดก็ตามที่คุณต้องการ ข้อมูลของคุณตรงนี้ field ตรงนี้ มันช่วย

จัดการการเข้าถึงได้อย่างดี ผมจะแสดงให้คุณเห็นในสไลด์ถัดไป ตัวอย่างเช่น อันนี้ก่อนเลย ถ้าคุณมี

ข้อมูลใน user และ user ID คุณสามารถใช้ request.auth มันเหมือนกับ auth ที่คุณได้รับจาก Firebase Authentication และคุณสามารถบอกได้ว่าผู้ใช้สามารถอ่านได้ก็ต่อเมื่อ ถ้า user ID ตรงกับอันนี้ นั่นหมายความว่าผู้ใช้สามารถ เข้าถึง node นี้ได้เฉพาะเมื่อพวกเขาเป็นเจ้าของมัน และสำหรับการสร้างก็ได้เช่นกัน คุณสามารถมี rule ใดๆ ก็ได้ ที่กำหนดในโครงสร้างนี้ มันสามารถเป็น โครงสร้างใดๆ ที่คุณต้องการ field ใดๆ node ใดๆ collection ใดๆ และอันต่อไป ตัวอย่างเช่น เมื่อคุณต้องการ ให้คนสร้าง stories เมื่อ story.published == true ถึงจะอ่านได้ แปลว่าถ้า story ถูกเผยแพร่แล้ว คุณก็จะสามารถอ่านได้ และถ้า user ID เป็นผู้เขียน story นี้ ผู้ใช้คนนั้นก็สามารถอ่านได้เช่นกัน นั่นคือวิธีที่คุณสามารถกำหนดได้ และคุณไม่ต้องกังวล เกี่ยวกับ security ใน backend และคุณสามารถกำหนด security ได้ตรงนี้ นี่คือ dashboard ของวิธีที่คุณ จัดการ security ของ Firebase คุณมี version control และสไลด์ถัดไป คุณสามารถทดสอบ logic ของคุณก่อนที่จะ deploy คุณสามารถใส่ location ตรงนี้ database path และคุณสามารถดูได้ว่าอันนี้ถูกต้องหรือไม่

คุณสามารถทดสอบ security logic ของคุณได้ตรงนี้ โอเค Supabase

Supabase Authorization: Row Level Security & Policy Management19:36

วิธีที่แนะนำสำหรับ authorization คือ row level security คุณอาจจะคุ้นเคยกับสิ่งนี้ แต่สิ่งที่คุณสามารถทำได้คือ เขียน function และใน function คุณสามารถมี logic บางอย่างใน database บางทีคุณอาจจะมี multi-tenant system บางทีคุณอาจจะมี creator หรือ owner ID แล้วคุณ

สามารถใช้สิ่งนั้นเป็น function และคุณสามารถใช้ policy คุณสามารถเห็นสิ่งนี้ได้ด้านล่าง คุณสามารถใช้ policy กับ table ดังนั้นโดยอิงจาก policy คุณสามารถจัดการ authorization ได้ วิธีการทำคืออิงจาก action มันสามารถเป็น read, update ตัวอย่างเช่น คุณสามารถตรวจสอบผลลัพธ์ของ function มันเกือบจะเหมือน JavaScript ใช่ไหมครับ ดังนั้นคุณสามารถเขียน JavaScript ใน function และ return ผลลัพธ์ได้ คุณสามารถใช้ custom JWT claims ได้เช่นกัน หรือคุณสามารถใช้กับ Postgres roles ก็ได้ มันค่อนข้างยืดหยุ่น แต่มันก็อาจจะซับซ้อน และมันอยู่ใน database โดยตรง ดังนั้นคุณต้องคิดถึง optimization ด้วย ถ้าคุณใช้ row level security คิดถึง performance ด้วย โอเค ต่อไป รอบที่ห้า

Round 5: Business Logic & Functions - Firebase Cloud Functions (Event-Driven)20:51

Business logic และ function โอเค Firebase เป็น event driven ดังนั้นอย่างเช่น เมื่อผู้ใช้อัปเดตข้อมูล คุณอาจ ต้องการมี logic เพิ่มเติมเพื่อแก้ไขข้อมูลจากอันนี้ ย้ายข้อมูลไปยัง node อื่น นั่นคือที่ที่ Firebase Cloud Function เข้ามา ดังนั้น พวกเขากำจัดความจำเป็น

ในการสร้าง backend monolithic system ทั้งหมด คุณสามารถสร้างแค่ function และคุณสามารถ deploy function ใหม่ได้ สิ่งสำคัญคือ Firebase Functions รองรับ JavaScript และ Python ในตอนนี้ และพวกเขามี auto scaling และคุณสามารถเรียก function โดยตรงได้ ไม่ต้องรอ event trigger function สามารถทำหน้าที่เป็น API endpoint ให้คุณได้เช่นกัน ตัวอย่างเช่น เมื่อผู้ใช้อัปเดต

คุณ watch ดูค่าที่เขียนสำหรับ user ID ดังนั้นเมื่อค่า JSON ของผู้ใช้ถูกอัปเดต มันเกิดการ trigger function นี้ อันนี้จาก Python และ อันนี้จาก JavaScript และคุณสามารถ monitor function ของคุณใน dashboard ได้ เช่น จำนวนการเรียกใช้ และคุณสามารถเปิด log เพิ่มเติมใน Google Cloud Cloud log service เช่นกัน ที่คุณสามารถ monitor ใน Google Cloud ในบริการอื่น โอเค Supabase ใช่ พวกเขาก็มี function เช่นกัน

Supabase Edge Functions: Deno Runtime & Flexible Use Cases22:17

พวกเขาเรียกมันว่า edge function แน่นอนว่าเราต้องการรันมันบน edge สิ่งพิเศษอย่างนึงคือมันใช้ deno runtime

คุณอาจจะคุ้นๆ ไดโนเสาร์ตัวนี้ และคุณสามารถเขียน function สำหรับอะไรก็ได้ จัดการ HTTP request คุณสามารถโต้ตอบกับ database โดยใช้ Supabase SDK หรือคุณสามารถ serve REST server เล็กๆ ได้ คุณสามารถใช้ function สำหรับอะไรก็ได้ที่คุณต้องการ มันค่อนข้างยืดหยุ่น ไปต่อกัน รอบที่หก Storage

Round 6: Storage - Firebase Storage with Rules & Extensions22:55

อันนี้ง่ายมากสำหรับ Firebase คุณสามารถเก็บรูปภาพ ข้อความ หรือไฟล์ CSV ใดๆ ก็ได้ มันเหมือนกับการกำหนด rule สำหรับ storage เหมือนกับที่คุณกำหนด rule ใน real-time database และคุณสามารถเห็น metadata ของไฟล์นั้น พวกเขายังมี extension สำหรับ คุณในการแก้ไขข้อมูลจากไฟล์ที่เขียน ดังนั้น ก่อนอื่นเลย ถ้าผู้ใช้อัปโหลดไฟล์นี้ คุณสามารถมี extension อื่น ที่พร้อมใช้งานเพื่อลดขนาดไฟล์ให้เป็น thumbnail อันนี้สามารถทำได้โดยอัตโนมัติ โอเค

Supabase Storage: S3-Based with Buckets, CDN, and Transformations23:34

สำหรับ Supabase พวกเขาก็มี SDK ที่คุณสามารถโต้ตอบกับ storage ได้ มันใช้ S3 บริการของ AWS มันใช้

bucket และ file ถ้าคุณเคยทำงานกับสิ่งนี้ มันเหมือนกับ folder แล้วคุณสามารถใส่ไฟล์ลงใน folder ที่สามารถเป็น public หรือ private และมันสามารถ serve จาก CDN ได้ ดังนั้นคุณสามารถทำ transformation บางอย่างที่คุณรวมเข้าด้วยกัน ตัวอย่างเช่น กับ edge function คุณสามารถทำ image transformation ได้เช่นกัน Authorization จัดการด้วย JWT หรือคุณจัดการโดยตรงกับ S3 เพราะพวกเขาจัดการ S3 bucket ให้คุณ ดังนั้นคุณสามารถใช้ S3 client ที่คุณเห็นด้านล่าง ดังนั้น ใช้ SDK หรือ ใช้ S3 โดยตรงก็ได้ ถ้าคุณกลัวเรื่อง lock-in โอเค ไปต่อกัน

Round 7: AI Capabilities - Firebase's Integration with Vertex AI & GenKit24:22

แน่นอนว่าพวกเราทุกคนมาที่นี่เพื่อ AI ใช่ไหมครับ งั้นหัวข้อต่อไป

เนื่องจาก Firebase อยู่ใน ecosystem ของ Google Cloud พวกเขามีหลายสิ่งหลายอย่างเพื่อให้ทันกับ OpenAI และ AWS พวกเขามีระบบ UI ของตัวเองที่คุณสามารถจัดการ prompt ได้ และพวกเขามี แค่อยากจะแสดงให้ดูคร่าวๆ ไปสไลด์ต่อไปเลยครับ คุณสามารถใช้ Vertex AI ใน Firebase ได้ Vertex AI เป็นฟีเจอร์ ML ของ Google Cloud คุณสามารถสร้างระบบ RAG ใน Vertex และคุณสามารถทำ vector search ได้ และมันสามารถ integrate เข้ากับ Firebase ได้ อันนี้เพิ่งเปิดตัวใหม่ GenKit คุณสามารถสร้าง GenAI ใน

ฝั่ง client ได้ พวกเขามี wrapper ให้คุณ interact กับ AI ได้รวดเร็วยิ่งขึ้น และพวกเขายังมีฟีเจอร์ embedding ด้วย นั่นคือทั้งหมด สำหรับ Supabase ผมจะพูดถึง

Supabase AI: Vector Support (pgvector) & Edge Function Integrations25:32

สองสิ่ง สิ่งแรกคือ vector คุณสามารถสร้าง column โดยใช้ pgvector ทำให้เก็บข้อมูล embedding ได้ มีตัวอย่างหนึ่งตรงนี้ และสิ่งที่สองคือพวกเขามี integration กับ model ที่คุณสามารถใช้ได้ บางครั้งก็ pre-installed ใน edge function ดังนั้นคุณสามารถ ใช้ model เล็กๆ ได้โดยตรงใน function และสามารถ interact ได้ คล้ายกับที่ภูมิแสดงให้เห็น คุณสามารถสลับระหว่าง model ได้ และคุณสามารถสร้าง embedding และเก็บมันเป็นส่วนหนึ่งของ data schema ปกติของคุณได้ คุณเพิ่มอีกหนึ่ง column สำหรับ embedding ของคุณ โอเค ใกล้เสร็จแล้ว

Round 8: Real-time Features - Supabase Real-time with Channels & Postgres26:14

รอบที่แปด real-time ผมคิดว่าเราสามารถทำ อันนี้ได้อย่างรวดเร็ว ผมได้พูดถึง real-time feature หลายครั้งสำหรับ Firebase นี่เป็นเพียงการแสดง dashboard อีกอันสำหรับ Firebase นี่คือวิธีที่คุณเก็บข้อมูล ใน nested JSON value และนี่คือสำหรับ Firebase โอเคๆๆ คุณทำให้ผมสับสน Supabase

โอเคๆ Supabase มีสองวิธีในการทำ

อย่างแรกคือ channel channel คล้ายกับ table และสิ่งที่คุณสามารถใช้คือ broadcast broadcast คุณกำลัง listen event ใน database และคุณสามารถเขียน logic ตาม event ใน database หรือ presence ซึ่งคล้ายกับ online presence หรือ เวลาที่โปรแกรมโชว์ว่าใครกำลังแก้ไฟล์นี้อยู่บ้าง คุณสามารถใช้ authorization ผ่าน row level security ได้เช่นกัน เพราะทุกอย่างใช้ Postgres เป็นพื้นฐาน ดังนั้น real-time ก็ใช้ Postgres เป็นพื้นฐานเช่นกัน โอเค อันสุดท้าย

Round 9: Pricing - Firebase Realtime Database & Firestore Pricing27:11

น่าสนใจที่สุด คือราคา

โอเค ผมคิดว่าเราสามารถข้ามอันนี้ไปได้ SDK โอเค คุณต้องการไปต่อที่ SDK ก่อนไหม ไปต่อที่ SDK เลยครับ ขอโทษครับ หัวข้อผิด โอเค ดู SDK ของ Firebase กัน

คุณมี JS และ Python ตรงนี้ แค่อยากจะแสดง snippet

ของโค้ด มันใช้งานง่ายมากสำหรับผู้ใช้ Python คุณสามารถ pip install และ import firebase_admin และจัดการข้อมูลของคุณได้ เช่นเดียวกับ JavaScript โอเค Supabase ก็คล้ายกัน คุณมี SDK สำหรับฝั่ง client ที่สามารถรันบน server ได้เช่นกัน และปกติแล้วจะ scoped คุณมี authorization ขอโทษครับ authentication, storage admin และคุณมี CLI เพื่อรัน Supabase แบบ local ดังนั้นคุณสามารถ interact และรัน Docker container ทั้งหมดจาก Supabase แบบ local ด้วย CLI ได้ ราคา โอเค เนื่องจาก Firebase มีสอง product

real-time database และ Firestore use case ส่วนใหญ่สำหรับ real-time database พวกเขาจะไม่คิดค่าบริการสำหรับการอ่านและเขียน พวกเขาจะคิดค่าบริการเฉพาะ database data store ดังนั้นมันจะเป็น $5 ต่อ gigabyte ที่เก็บ

ดังนั้นถ้าคุณไม่มีข้อมูลมาก และแอปพลิเคชันของคุณ ต้องการการอ่านและเขียนมาก มันจะง่ายกว่าสำหรับคุณที่จะใช้ real-time database แต่สำหรับอันนี้ ผมคิดว่า คนส่วนใหญ่จะบอกว่าเป็นตัวเลือกที่ดีที่สุด ตัวเลือกมาตรฐานถ้าคุณต้องการใช้ Firebase และพวกเขาจะคิดค่าบริการ คุณสำหรับการอ่านและเขียน document การอ่านและเขียน ดังนั้น free tier คือ 20,000 ครั้งต่อวันสำหรับการเขียน และ 50,000 ครั้งต่อวันสำหรับการอ่าน แต่ราคาก็ถูกมาก นี่คือ free tier

ไปสไลด์ต่อไป อันนี้สำหรับ

มันแค่ $0.03 ต่อ 100,000 document

ดังนั้นมันจึงไม่น่ากังวลมากนัก เรามีคำกล่าวว่าถ้าคุณพบว่าราคามันแพง

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

Supabase Pricing: Cloud & Self-Hosting Options29:41

นี่คือราคา cloud แน่นอนว่าคุณสามารถใช้ cloud offering ของพวกเขาได้ พวกเขามี free tier ซึ่งค่อนข้างใจกว้าง มันขึ้นอยู่กับจำนวนผู้ใช้รายเดือน พื้นที่ database และพื้นที่จัดเก็บไฟล์ของคุณ ดังนั้นแต่ละ function จะมีข้อจำกัดที่แตกต่างกัน ที่คุณต้องระวัง ผมคิดว่าคุณต้องระวัง สิ่งที่อิงตามการใช้งานเป็นหลัก ดังนั้นถ้าเราพูดถึง network ถ้าเราพูดถึง database storage คุณจะต้องคำนวณด้วยตัวคุณเองว่าคุณใช้ไปเท่าไหร่ คุณต้องสังเกต คุณต้องระมัดระวังเกี่ยวกับเรื่องนี้ แต่คุณสามารถ self-host ได้ คุณสามารถรันมันได้ฟรี

แน่นอนว่าคุณสามารถรันมันแบบ local หรือรันมันบน VPS เล็กๆ แน่นอนว่ามันจะถูกกว่า cloud version มาก แต่คุณต้องจัดการมันด้วยตัวคุณเอง ดังนั้นนี่คือราคา cloud ผมคิดว่ามันอาจจะคล้ายกับ Firebase ในแง่ของราคา แต่มันก็ scale ตาม

network request ของคุณหรือพื้นที่จัดเก็บที่คุณมีใน database ของคุณ ดังนั้นตรวจสอบให้แน่ใจก่อน โอเค ดูเหมือนว่าเราจะจบแล้ว

Conclusion: Winner & Audience Q&A30:51

ใครเป็นผู้ชนะครับ มีความคิดเห็นอะไรไหมครับ โอเค มีคำถามไหมครับ

(ผู้ฟัง: “Google เก็บข้อมูล incognito ของคุณ และ Firebase ไม่ใช่ open source”) ผมชอบความคิดเห็นของคุณครับ

งานนี้งาน Supabase meetup ใช่ไหมครับ ผมก็ไม่รู้เหมือนกัน มาดูกันว่าใครเป็นผู้ชนะ โอเค “It depends”

ขึ้นอยู่กับหลายอย่างครับ โอเค งั้นเรามาดูอีกครั้ง

TLDR: When to Choose Supabase vs. Firebase31:38

- คุณไปก่อนก็ได้ครับ - โอเค ผมไปก่อนก็ได้ นี่คือ TLDR ใช่ไหมครับ ถ้าคุณชอบ open source คุณอาจจะชอบ Supabase ถ้าคุณชอบ self-hosting และ ชอบการปรับแต่งระบบ Supabase เป็นตัวเลือกที่ดีสำหรับคุณ ราคาถูกมากในการเริ่มต้น Supabase ยังเป็นตัวเลือกที่ดี ถ้าคุณชอบ meme หรือหัวข้อที่กำลังเป็นที่นิยม Supabase เหมาะสำหรับคุณ พวกเขามี documentation ที่ดีมาก จริงๆ นะ ผมจะบอกว่านี่เป็นหนึ่งใน documentation ที่ดีที่สุด และ community ที่ยอดเยี่ยม คุณอยู่ที่นี่ใช่ไหมครับ ผมคิดว่า community ของ Supabase ดีมาก

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

10,000 monthly active users โดยไม่ต้องถึงขีดจำกัดของ free tier

ดังนั้น free tier ของพวกเขาจึงสูงมาก และถ้าคุณชอบ NoSQL

มากกว่า SQL อันนี้ก็เหมาะสำหรับคุณเช่นกัน และความสามารถด้าน real-time มันเร็วมากสำหรับคุณ ในการอัปเดตแบบเรียลไทม์ และก็ดีมาก เช่นเดียวกับ Supabase พวกเขามี CLI, SDK และคุณสามารถใช้ Google Cloud CLI ได้เช่นกัน ดังนั้นมันจึงสามารถ integrate และ deploy ได้ง่าย และสุดท้าย Vertex AI มันมีฟีเจอร์ที่แข็งแกร่งมาก ในด้าน AI infrastructure พวกเขามี แพลตฟอร์มที่สามารถจัดการฟีเจอร์ AI ได้มากมาย ในอนาคต ครับ โอเค และนี่คือ reference สำหรับคุณ

Speaker Introductions & Projects: Datascale & Hubql33:22

เกี่ยวกับ Supabase และ Firebase ครับ และทั้งหมดนี้ก็คือการเปรียบเทียบ อยากจะแนะนำตัวเราเองสักหน่อย เรายังไม่ได้แนะนำตัวกันเลย สำหรับผม ผมมาจาก datascale เรามี SQL analyzer เราช่วยคุณ reverse engineering data model ถ้าคุณมี SQL query จำนวนมาก คุณไม่รู้ว่า data model ของคุณเป็นอย่างไร คุณไม่รู้ metadata จาก query ของคุณ คุณสามารถ automate ได้ จาก SQL query ไปยังแพลตฟอร์มของเรา และเราจะวิเคราะห์ มัน สร้าง diagram ให้คุณโดยอัตโนมัติ และนี่เป็น shared workspace ที่ ทีมของคุณสามารถแชร์ SQL query และทุกอย่างร่วมกันได้

เยี่ยมเลย ขอบคุณครับภูมิ ไปลองดู datascale กันนะครับ และผมเป็น co-founder ที่ hubql เรากำลังสร้าง เครื่องมือทางเลือกสำหรับ Postman ถ้าคุณไม่ชอบ Postman หรือรำคาญ Postman โปรดมาคุยกับผม

API client ของเราทำงานร่วมกับ JavaScript framework ต่างๆ รวมถึง Elysia บางทีคุณอาจจะชอบ เรากำลังมองหา feedback ลองดูที่ hubql.com หรือมาคุยกับผม ยินดีที่จะพูดคุย เกี่ยวกับ Supabase ด้วยแน่นอน และผมคิดว่าทั้งหมดนี้ก็คือหัวข้อนี้ ขอบคุณครับ ขอบคุณมากครับ ขอบคุณครับ