Videos → What's new in MongoDB 8.0
Description
พบกับ คุณปิติ Senior Consulting Engineer จาก MongoDB สิงคโปร์ กับหัวข้อ What is new in MongoDB 8.0 เรียนรู้เกี่ยวกับฟีเจอร์ใหม่ๆ ที่น่าสนใจใน MongoDB เวอร์ชัน 8.0 ไม่ว่าจะเป็นเรื่องประสิทธิภาพการทำงานที่ดีขึ้น เครื่องมือ migration ที่ใช้งานง่ายขึ้น รวมถึงการปรับปรุงด้านความปลอดภัย มาดูกันว่าฟีเจอร์เหล่านี้จะช่วยเพิ่มประสิทธิภาพและความสะดวกสบายในการทำงานกับ MongoDB ได้อย่างไรบ้าง
Chapters
- แนะนำวิทยากรและหัวข้อ What's New in MongoDB 8.0 0:00
- MongoDB เวอร์ชั่นต่างๆ และ ความสำคัญของ Community Edition 0:52
- ฟีเจอร์ใหม่ใน MongoDB 8.0: Search และ Vector Search 2:51
- เครื่องมือ Migration: ย้ายข้อมูลจาก Relational Database สู่ MongoDB 6:19
- Modernization: อัพเกรดแอปพลิเคชั่นเก่าด้วย AI 10:56
- 4 จุดเด่นของ MongoDB 8.0: Optimization, Workload, Scaling, Security 12:41
- Optimization: Performance เร็วขึ้น, ยกตัวอย่างคำสั่งที่ปรับปรุง 13:54
- การทำ Index ใน MongoDB: ESR Rule และ Best Practice 17:17
- มาตรฐานใหม่ของ Performance: เปรียบเทียบ MongoDB 8.0 กับเวอร์ชั่น 7 19:18
- Time Series Collection: จัดเก็บข้อมูล Real-time ได้ดีขึ้น 22:11
- Machine Learning Model ใน MongoDB: ใช้สำหรับ Vector Search 24:50
- Query Execution: ลดความซับซ้อน เพิ่มประสิทธิภาพ 25:28
- Memory Management: การจัดการ RAM และ Data File 28:44
- การเพิ่ม RAM ช่วยแก้ปัญหาความเร็วได้จริงหรือ? + วิธีวิเคราะห์ปัญหา 33:15
- สาเหตุหลักของ Database ช้า + แนะนำเครื่องมือวิเคราะห์ Log 37:28
- Replica Set: ลด Lag Time เพิ่มประสิทธิภาพ HA 39:06
- Acknowledge (Write Concern): การันตีความถูกต้องของข้อมูล 40:40
- Atlas Search: เครื่องมือวิเคราะห์ Query บน Cloud 41:25
- Query Shape: บล็อค Query รูปแบบเฉพาะ ป้องกันปัญหา 42:30
- Timeout: ตั้งค่า Max Time ป้องกัน Query ค้าง 43:36
- Force Index: บังคับ Query ให้ใช้ Index ที่ต้องการ 44:06
- Scaling: ย้าย Collection ใน Sharding ได้ง่ายขึ้น 44:48
- Faster Resharding: ลดเวลา Reshard ลง 10 เท่า 46:41
- ลดค่าใช้จ่าย Server ด้วยการยุบ Config Server 47:00
- Security: เชื่อมต่อ OpenID, Federation ได้ง่ายขึ้น 47:59
- Queryable Encryption: ค้นหาข้อมูลที่เข้ารหัสแบบ Range ได้แล้ว 49:01
- Log Format: รองรับมาตรฐาน Open Cybersecurity 50:26
- สรุป What's New in MongoDB 8.0 50:51
Transcript
คำบรรยายต่อไปนี้อาจไม่ถูกต้องทั้งหมด หากคุณพบข้อผิดพลาดใดๆ คุณสามารถช่วยแก้ไขข้อผิดพลาดได้บน GitHub
แนะนำวิทยากรและหัวข้อ What's New in MongoDB 8.00:00
เซสชั่นนี้ครับ เราได้ คนที่เป็น น่าจะใกล้ชิดกับโปรดักต์ ของ MongoDB ที่สุดแล้วนะครับ แล้วก็เป็นพนักงาน MongoDB คนเดียวในทีมด้วยนะครับ ที่เหลือไม่ได้เป็น แล้วก็เดี๋ยวเขาจะมาพูดนะครับ ในหัวข้อ What is new in MongoDB 8.0 นะครับ ก็เดี๋ยวมาดูกันครับว่าของใหม่ๆ ที่กำลังจะออกมาหรือว่าออกมาแล้วเนี่ย เป็นยังไงนะครับ คนนี้ import ตรงนะครับ จาก MongoDB สาขาพะเยา ไม่ใช่นะครับ MongoDB สิงคโปร์ ขอเสียงปรบมือให้กับพี่ปิตินะครับ Senior Consulting Engineer จาก MongoDB ครับผม เดี๋ยวเราเข้าเปลี่ยนสายแป๊บนึงนะครับ
เดี๋ยวลองดูนะครับว่าจะเป็นยังไงนะครับ 7.0 นะฮะ โอเค 8.0 นะฮะ
MongoDB เวอร์ชั่นต่างๆ และ ความสำคัญของ Community Edition0:52
ทุกคนน่าจะเคยใช้ MongoDB กันอยู่บ้างใช่ไหมครับ ใครยังใช้ MongoDB รุ่นต่ำกว่า 3 บ้างฮะ คือมันมีนะ ผมเคยเจอ ใครใช้รุ่น 4-5
โอเค 6 ขึ้นไป โอเค โอเคครับ ส่วนที่ไม่ยกก็คือรอใช้รุ่น 9 ซึ่งจะออกในอีก 2 ปีข้างหน้าใช่ไหมครับ โอเคนะครับ เดี๋ยวรอดูนะครับ ครับ มาแล้วครับ ถ้าพี่พร้อมก็เชิญเลยครับ
โอเคนะครับ สวัสดีครับทุกคน ผมตื่นเต้นนิดหน่อยนะครับ
ในวันนี้นะครับ เราจะมาพูดถึงตัวที่เป็น MongoDB Version 8 ซึ่งภายในปีนี้จะออกเป็น GA ก็คือ General Available นะครับ
โอเค อันนี้เป็นสไลด์ที่เรามีการพูดในงาน mongodb.local ซึ่งผมอาจจะ skip บางอันไปนะครับ เพราะว่ามันอาจจะ ไม่ได้มีเนื้อหาอะไรที่ดึงดูดความสนใจ ให้เราสนใจได้มากนะครับ จะเป็นกล่าวประวัติเนาะ แล้วก็ปัจจุบันตอนนี้ มันจะเป็น release candidates เวอร์ชัน 8 นะครับ โอเค อันนี้เราจะเห็นว่า evaluation ก็คือในแต่ละปี มันก็จะค่อยๆ เริ่มต้นมีเวอร์ชันมากขึ้นไป จนถึง ณ ปัจจุบันเนี่ย จะออกเวอร์ชันทั้งหมดเนี่ย ประมาณ 1 ปี 1 เวอร์ชัน นะครับ MongoDB จะออก 1 ปี 1 เวอร์ชัน ซึ่งผมถือว่าค่อนข้างเร็ว นะครับ อันนี้คือเป็นนโยบายพื้นฐาน ซึ่งผมก็ยังไม่แน่ใจนะครับว่าเขาจะ มีการแบบ 2 ปี 1 ครั้งรึเปล่านะครับ แต่ต อนนี้เขาจะผลักดันให้มันเป็น นะครับ 1 ปี 1 เวอร์ชันนะครับ ตรงนี้นะครับ อันนี้จะเป็นตัวเวอร์ชันนะครับ โอเค ต่อไปนะครับ
ฟีเจอร์ใหม่ใน MongoDB 8.0: Search และ Vector Search2:51
ที่จริงแล้วนะครับ สิ่งแรกที่ MongoDB จะมีในเวอร์ชัน 8 เลยนะครับ ก็คือ ปกติแล้วผมเข้าใจว่าทุกท่านเนี่ยใช้ Community Edition อยู่แล้ว ผมเชื่อว่าอย่างนั้นนะครับ เพราะว่าเราเป็น product ที่มีทั้ง open source และตัว commercial นะครับ เพราะฉะนั้นในตัว ตัว open source เนี่ยก็จะมี community ซึ่ง community ต่างกับ EA นะครับ อยู่แค่จุดเดียว
คำว่าจุดเดียวก็คือ อยู่แค่ segment เดียว ก็คือเรื่องของตัว Security Advance นะครับ อันนี้ผมพยายามให้ความรู้ไปด้วย เพราะฉะนั้นเราจะเห็นได้ว่า product ที่เสียเงินกับไม่เสียเงินต่างกันแค่ตรงนี้จุดเดียว ดังนั้นเมื่อเป็น MongoDB เวอร์ชัน 8 ที่กำลังจะเกิดขึ้นนะครับ
ในประมาณปลายปี อีกไม่กี่เดือนนี้นะครับ เวอร์ชัน 8 ที่จะออกมาเนี่ย เขาบอกว่า Community Edition เนี่ยครับ จะมีฟีเจอร์ใหม่ขึ้นมาทันทีนะครับ ฟีเจอร์หนึ่งชื่อว่า Search กับ Vector Search ก็คือปกติแล้วนะครับ MongoDB เนี่ย เป็นเวอร์ชัน Community ใช่ไหมครับ แล้วก็เป็นเวอร์ชันเสียตังค์และเวอร์ชัน Cloud นะครับ มีทั้งหมด 3 เวอร์ชันนะครับ เพราะฉะนั้นในตัวที่เป็น เวอร์ชัน Cloud เนี่ย ปกติแล้วเราจะเรียกว่าเป็น MongoDB Atlas นะครับ ซึ่งใน MongoDB Atlas เนี่ย ก็คือเป็น self-managed นะครับ ก็คือคุณสามารถที่จะเซ็ต config ต่างๆ ได้ deploy Mongo ได้นะครับ ก็จะมีฟีเจอร์หนึ่งที่เราเรียกว่าเป็น Atlas Search นะครับ ในตัว Atlas Search หมายความว่าอะไร หมายความว่าเราสามารถจะทำพวก full-text search ได้ search แบบ string แทนที่เราจะ search แบบ regular expression เราอาจจะไม่จำเป็นต้องทำแบบนั้น มันจะเป็นแบบ full-stream search นะครับ ซึ่งเบื้องหลังของตัว search เนี่ย โดยปกติแล้วก็คือใช้ตัว Apache Lucene ที่เป็นที่นิยมอยู่แล้วนะครับ เพราะฉะนั้น engine เดียวกับตัว Elastic Search หรือ OpenSearch นะครับ engine เดียวกันนะครับ เพราะฉะนั้นตอนนี้เขาก็จะโยกครับ ตัว Atlas Search นะครับ มา deploy อยู่บน on-prem โดยที่เปิดให้ community edition ใช้ก่อน เวอร์ชันเสียตังค์ตามมาทีหลัง
นี่คือค อนเซ็ปต์แรกนะครับ เพราะว่าเขาให้เห็นว่านักพัฒนาทุกคนเนี่ย ให้ความสนใจต่อการใช้ Community มากอยู่แล้ว ดังนั้น เราอยากให้นักพัฒนาได้ลองใช้ feature ที่ง่ายขึ้นนะครับ โดยการโยกตัว Atlas Search นะครับ มา deploy ลงบน Community Edition นั่นเอง ซึ่งจะมาอยู่ในเวอร์ชันที่เป็นเวอร์ชัน 8 แต่ยังคงเป็นลักษณะที่เหมือนเป็น beta
ก็คือมันจะมีการ develop ไปเรื่อยๆ แต่เราจะเริ่มใช้ได้ทันที อันนี้ก็คือเป็นสิ่งที่เขา announce นะครับ เป็น feature ซึ่งถ้าถามตัวผมก็คือผมอ่ะ ยังไม่ได้มีโอกาสเล่นจริงๆ จังๆ เพราะ product เขาค่อนข้างเยอะเนาะ เพราะฉะนั้นในความจริงแล้วผมเล่นแทบ ไม่ได้เล่นครบทุกตัว แต่ก็แบบประมาณ 90 กว่าเปอร ์เซ็นต์ที่ผมได้เล่นเพราะว่าลูกค้า จะมีการใช้งานที่หลากหลาย ดังนั้นเราจำเป็นที่จะต้องเรียนรู้ทุก product ก่อนออก เลยทุกตัวนะครับ อันนี้เป็นตัวแรกนะครับที่จะเข้ามาในเวอร์ชั่น 8 นั่นเองนะครับ เรื่องการใส่ search เข้าไป เพราะฉะนั้น search มี 2 ตัว ถ้าเห็นทางรูปก็คือ 1 ก็คือเป็นตัวที่เป็น search ปกติ เราเรียก full text search นะครับ ตัวที่ 2 เรียกว่า vector search เพราะว่าตามสมัยนิยมแน่นอน ตอนนี้ทุกคนทำ generative AI ดังนั้นทุกคนต้องการให้ระบบ search เนี่ย search ได้เร็วขึ้นนะครับ ซึ่งตรง vector search คืออะไรเนี่ยนะครับ เดี๋ยวเราไปคุยใน section ของน้องเจมส์นั่นเองนะครับ
เครื่องมือ Migration: ย้ายข้อมูลจาก Relational Database สู่ MongoDB6:19
ต่อไปนะครับ เราก็จะมีส่วนที่เป็นเวอร์ชันที่ release จริงจังแล้วก็คือ
เวลาที่เราต้องการที่อยากจะย้าย database ที่เป็น relational database ขึ้นมาบน NoSQL หรือ MongoDB นะครับ MongoDB จะมีเครื่องมือที่เราเรียกว่า migration เราเรียกว่า migration มี 2 ตัวหลักๆ ที่ ถือว่าเป็นตัวที่ active อยู่ตลอดเวลา ชื่อว่า mongosync กับ relational migrator mongosync ก็คือเป็นเครื่องมือสำหรับย้าย
database ที่เป็น relational database ก็คือ ก็คือตัว mongosync เนี่ยจะย้ายจากตัวที่เป็นตระกูล NoSQL ด้วยกัน อย่างเช่น Mongo Community หรือ database ที่เป็น NoSQL ที่เป็น JSON ตัวอื่นนะครับ ย้ายขึ้นมาบน MongoDB หรือบน Atlas เราจะเรียกว่าเป็น mongosync นะครับ ซึ่ง mongosync เนี่ยปกติแล้วเนี่ย เวลาเราย้าย migration เนี่ย หลายๆองค์กรจะมองภาพว่า เอ๊ะ ถ้าเราย้ายจาก A ไป B แล้วเกิดล่ม เราสามารถย้ายย้อนกลับจาก B มา A ได้ไหม ตัว mongosync สามารถทำที่เรียกว่าเป็น bi-direction ก็คือ เพราะว่าทุกธุรกิจจะต้องมีคำถามว่า เอ๊ะ ถ้าผมลองย้ายไปแล้วแล้วเกิดพัง ผม rollback ได้ไหม โอเคไหมครับ ทุกคนต้องมีคำถามนี้ เพราะไม่มีใครจะย้ายไปแล้วแบบ เออ พังก็ช่างมัน ก็ไปทำกันบนนั้นน่ะ คงไม่มีทางถูกไหมครับองค์กรทุกองค์กร ดังนั้น แปลว่าเราย้ายจาก A ไป B ปุ๊บ เราสามารถย้อนกลับได้ อันนี้คือตัว mongosync นะครับ ตัว mongosync เนี่ยมีหน้าที่แค่ย้าย data ครับ แต่ถ้าเราบอกว่าต้องการที่อยากจะย้ายจาก relational แล้วต้องการแบบ จะเข้าใจว่า เอ๊ะ ถ้าเราจะย้าย relational ที่เป็นโครงส ร้าง table ล่ะ มีความสัมพันธ์ one-to-many, many-to-many, one-to-one เนี่ย เราจะย้ายไป Mongo ยังไง เพราะความรู้ของเราอาจจะ อาจจะยังแบบไม่ได้เต็มที่ที่จะเข้าใจว่าการทำ modeling ของ MongoDB ทำยังไง
relational migrator ก็คือตัวตอบโจทย์ เพราะว่าอะไรครับ เพราะว่ามันคือเครื่องมือที่ เป็นหน้าเหมือน diagram ให้มองภาพเหมือนเราทำตัว ER diagram
เพราะฉะนั้นตัว relational migrator จะเป็นตัวที่ทำการ map relational database ให้เห็นเป็น ER diagram แล้วก็สามารถ map เป็นโครงสร้างของ relational ที่เป็น MongoDB เป็น NoSQL diagram นี่คือสิ่งที่มันสามารถ mapping อัตโนมัติ by default หลังจากนั้นคุณก็สามารถที่จะปรับแต่งได้ตามต้องการ แต่สำคัญกว่านั้นก็คือ เช่น เราต้องก ารจะย้าย database จาก MySQL จาก Oracle จาก SQL Server ไปบน MongoDB เราใช้เครื่องมือนี้ ข้อดีคือพอคุณสร้าง diagram เสร็จ mapping เรียบร้อยแล้ว คุณสามารถ run ย้าย data ได้ทันที การย้าย data ปกติเรามักจะมี 2 ส่วน ก็คือย้ายครั้งเดียวจบใช่ไหมครับ แต่ส่วนใหญ่ผมเข้าใจว่าระบบทุกคนมีขนาดใหญ่ ดังนั้นเราไม่สามารถจะย้ายครั้งเดียวจบได้ เราต้องย้ายที่เรียกว่า continuous ดังนั้นตัว relational migrator ทำการย้ายข้อมูล continuous ไว้ แล้วสามารถบอกว่า เออ วันนี้ traffic เยอะ หยุด เราสั่ง stop วันนี้ traffic น้อย อ่า run หมายความว่าอะไร หมายความว่าสมมุติว่าผมมี MySQL แล้วผมอยากจะย้ายไปบน MongoDB ผม map เรียบร้อยแล้ว ผมบอกว่า วันนี้ตอนตี 1 ผมต้องการย้ายข้อมูลเฉพาะตี 1 ถึงตี 4 เท่านั้น ผมสามารถตั้ง schedule แล้วก็ย้าย พอย้ายถึงตี 4 ปั๊บ run command API บอกว่า stop วันถัดไป ย้ายตีหนึ่งถึงตีสี่ ซ้ำ ทำอย่างนี้ไปเรื่อยๆ ได้ เราเรียกว่า ตัว continuous sync นะครับ ซึ่ง relational migrator ถูกออกแบบมาให้เราย้าย เหตุผลง่ายๆครับ เราต้องการย้ายลูกค้า relational database ไปอยู่บน Mongo ให้ได้ ดังนั้นเขาจึงสร้างเครื่องมือนี้เป็นเครื่องมือฟรี ที่เหมาะกับการย้าย ปัญหาหนึ่งของการย้าย data
relational database ไม่ใช่มีแค่ data อย่างเดียวจริงไหมครับ เขาจะมีตัวข้างในเรียกว่า stored procedure หรือ query ที่ซับซ้อน ดังนั้น relational migrator ทำการ เรียกว่า mapping ก็คือเขาใส่ tool AI เข้าไปทำการ mapping command ใน function หรือ stored procedure ที่เป็น relational SQL ให้แปลงเป็น Mongo Query Language อันนี้คือความสามารถของเขา ดังนั้นหมายความว่ามันแปลงก็ไม่ใช่ 100% เพราะว่าหมายความว่า พอมันแปลงปุ๊บ แน่นอนคุณต้องเป็นคน adjustment ว่าถูกต้องหรือเปล่า แต่มากกว่า 80% มันจะแปลงได้อย่างถูกต้อง ทำให้เราลดเวลา ในการแปลงคำสั่งที่ฝังอยู่ใน stored procedure นั่นเองนะครับ อันนี้เราเรียกว่าเป็นตัว relational migrator นะครับ
Modernization: อัพเกรดแอปพลิเคชั่นเก่าด้วย AI10:56
ต่อไปนะครับ ถ้าเรามาพูดถึงในมุมของ modernization modernization ก็คือว่าลูกค้า ใช้ MongoDB เวอร์ชันเก่า หรือใช้ relational database อยู่ แล้วแอปพลิเคชันเป็นเวอร์ชันเก่า เขาจะมักจะมีปัญหาหนึ่งซึ่งบอกว่า แล้วถ้าเราย้ายแอปพลิเคชันไป เราต้องแก้แอปเยอะมาก แก้แอปเยอะมาก เราจะย้ายทำไม ในเมื่อเราย้ายจาก relational ไปอยู่ relational ไม่ง่ายกว่าเหรอ ดังนั้นในทีมของ MongoDB ก็เลยเกิดทีม
ที่เรียกว่า Modernization Factory เป็นทีมที่จะช่วยอำนวยความสะดวก โดยใช้ระบบ AI ในการ convert source code ทั้งหมด ซึ่งเขาพัฒนาเองอยู่แล้วภายใน ทำการแปลง source code จากการ mapping เช่น คุณเขียน Java แล้วคุณ call ด้วย JDBC ที่เป็น SQL query คุณแปลง code เนี่ย ให้กลายเป็น MongoDB code ได้เลย เป็น Java connect MongoDB พร้อมกับเขียน Aggregation Framework ได้เลย อันนี้ก็คือฟีเจอร์ที่เราพูดถึงว่าเป็นการทำ AI-enabled application modernization tools นะครับ ซึ่งตัวนี้ก็จะเป็นทีมที่ช่วยในการย้าย แป ลว่าอะไรครับ แปลว่า คุณอยากจะย้ายใช้ MongoDB sync relational ทำด้วยตัวเองได้นะครับ ไม่มีปัญหา แต่ถ้าคุณไม่มีทีมในการแก้ source code นะครับ ทาง MongoDB มีทีมและ tool ในการ convert ซึ่งเขาไม่ได้เอา tool ออกมา public เนาะ เป็น tool สำหรับใช้ internal แต่เขารู้ว่า เขาพัฒนามาเพื่อให้ระบบ AI generate code เพราะเราอยู่ในยุคที่ code มัน generate เองได้ ถูกไหมครับ แค่พิมพ์ไปใน prompt เนาะ เพราะฉะนั้นเขาก็สร้าง prompt ด้วยตัวเองขึ้นมานะครับ เพื่อให้ manage ตรงนี้นะครับ อันนี้คือหนึ่งในความสามารถนะครับ ที่มีในตัว MongoDB 8 ที่จะมีเข้ามานะครับ
4 จุดเด่นของ MongoDB 8.0: Optimization, Workload, Scaling, Security12:41
ในระหว่างทาง มีคำถามอะไรก็คือถามได้หมดนะครับผม เท่าที่ผมส ามารถที่จะตอบได้
ต่อไป ฟีเจอร์หลักๆ แบ่งออกเป็น 4 ส่วน
หนึ่งก็คือ MongoDB 8 เนี่ยจะปรับ optimization คือ performance จะดีขึ้น แต่เราเห็นภาพนะ มันจะมีภาพ ฉะนั้นผมเชื่อว่า MongoDB 8 เนี่ย เราเรียกว่าเป็น เมเจอร์เชนจ์มากๆ แล้วมีการวัดผลอย่าง 100% ตามมาตรฐานของสาย database
พวก database เนี่ยจะมีเว็บไซต์สำหรับวัดมาตรฐาน เขาไม่ได้ใช้แบบ load test ทั่วๆ ไป เขาจะมีเว็บไซต์สำหรับ วัดว่า database ยี่ห้อแต่ละยี่ห้อเนี่ย ถ้าคุณต้องใช้ data set แบบนี้แบบนั้นนะ คุณถึงจะวัด แล้วทุกคนก็จะไปวัด ด้วยกันที่ standard ตัวนั้น เพื่อที่จะวัดว่า โอเค ของฉันใช้ speed แบบ ได้เร็วเท่าไหร่นะครับ เดี๋ยวเราจะมีภาพให้ดูนะครับ ซึ่งตัวนี้จะเป็นเว็บไซต์ปกติที่เราเห็นนะครับ อันนี้เรื่องตัว optimization นะครับ สองก็คือเรื่องของการ workload นะครับ workload management นะครับ ก็คือจะทำการ manage ทำให้การโหลดข้อมูลเนี่ยเร็วขึ้นนะครับ มันก็จะมีเรื่อง optimize เรื่อง workload เรื่อง flexible scaling นะครับ แล้วก็ improve ตัว security นะครับ เดี๋ยวเรามาดูกันนะครับ ทั้ง 4 key นะครับ
Optimization: Performance เร็วขึ้น, ยกตัวอย่างคำสั่งที่ปรับปรุง13:54
เริ่มแรกนะครับ ตัว optimization นะครับ Optimization เนี่ยนะครับ
ถ้าใครใช้ MongoDB อยู่แล้ว จะค้นพบว่าการทำ application framework เนี่ยเป็นเรื่องที่งง เพราะทุกคนคุ้นเคยต่อการใช้คำสั่ง SQL ในการ select, join, group by Nested join นะครับ ทำอะไรก็ตามนะครับ ด้วย join เพราะฉะนั้น เวลาการทำตัว aggregation framework เป็นเรื่องที่ยาก แต่ว่าเราไม่ต้องกังวลครับ เพราะว่าถ้าพวกเราใช้ Compass นะครับ ซึ่งเป็น MongoDB Compass เนี่ย พวกเราจะเห็นว่ามันจะมี feature ที่เรียกว่า NLP ก็คือ Gen AI เราสามารถ บอกเขาได้เหมือน prompt เลย ใส่ prompt เข้าไปมันจะ generate query ให้เรา อันนี้คือสิ่งที่ผมก็ใช้อยู่ทุกวันนะ เพราะว่า บางอย่างมันเป็นท่าที่ซับซ้อน ดังนั้นผมก็ไม่สามารถที่จะคิดให้เร็วๆ ได้ ผมก็จะถาม พอเค้าเอามาปุ๊บ ผมก็จะค่อยๆ แปลงมันให้ถูกต้องต่อผลลัพธ์ ซึ่งเป็นการพัฒนามันไป ซึ่งใน performance ของเวอร์ชัน 8 เนี่ยนะครับ สิ่งหนึ่งที่เราบอกว่า raise the bar Raise the bar คือพยายามทำให้มันขึ้นแบบ top level ในส่วนหลักๆ เลยของ performance เมื่อเทียบ เมื่อเทียบกับเวอร์ชัน 7 นะครับ ก็คือ 1.
Group กับ project นะครับ ปกติแล้ว MongoDB เนี่ยเราจะมีการ group by ถูกไหมครับ SQL ทุกคนเนี่ยก็ต้องมีการ group by ผมเชื่อว่าทุกคน group by โปรเจกต์ก็คือการใช้คำสั่ง select ปกติทุกคนคงไม่ใช้ select star หรอกจริงไหมครับ ถ้าเวลาเราใช้ relational database เราจะใช้คำว่า select แล้วก็เลือกคอลัมน์ มันทำให้การดึงง่ายขึ้น แต่ในมุมของ ตัวระบบที่เป็น MongoDB เราใช้คำว่า project ก็คือการ select เพราะฉะนั้นพวกนี้เค้าจะปรับปรุง performance ให้มีประสิทธิภาพดีขึ้น ต่อไปพูดถึงตัว filter แล้วก็ sort ปกติเรา filter ถ้า SQL ก็คือใช้คำว่า WHERE ถ้า MongoDB เราใช้คำว่า $match นะครับ เพราะฉะนั้นคำว่าตัว $match เนี่ยก็คือจะช่วยทำการ filter ให้มีศักยภาพในการ query ให้เร็วขึ้นนะครับ ผมอาจจะไม่ได้ลง detail โดยแบบละเอียดมากนะ เพราะว่าผมมันมีเอกสาร อยู่แล้วที่ผมมาเห็นภาพ แต่ผมรู้ว่าเค้าให้เห็นภาพว่า ตัว operator ตัวไหนบ้าง ที่ performance ดีขึ้น เป็น operator ที่พวกเราต้องใช้อยู่แล้วในสาย MongoDB ก็คือ $match นะครับ ก็คือ $sort นะครับ แล้วก็ตัวสุดท้าย $lookup ซึ่งปกติแล้วผมแนะนำอยู่แล้วว่า เราไม่ควรมี lookup lookup ก็คือการ join เราไม่ควรมี lookup เกิน 2 lookup มันก็เหมือนเราเขียน relational database เราไม่ควร INNER JOIN ๆ ๆ ๆ ถูกไหม
เพราะว่ามันจะทำให้ประสิทธิภาพ… performance ของการโหลดขึ้น memory เนี่ยมันหนักเกินไป นี่คือเหตุผลเดียวนะครับ ว่าบอกว่าถ้าเมื่อไหร่ก็ตามคุณใช้ lookup ทุกครั้งคุณจะใช้ CPU เยอะ ต่อให้คุณมี index แล้วก็ตาม ดังนั้นเขาจึงบอกว่าควรมีการ join เพียงแค่ไม่เกิน 2 ครั้ง ซึ่ง lookup ในท่าของ Excel มันก็คือการทำ left join อันนี้เป็นข้อมูลเพิ่มเติมนะ ถ้าใคร search รอบอยู่แล้ว นี่คือการทำ left join นะครับ เพราะ lookup เขาจะปรับปรุงให้มีประสิทธิภาพมากยิ่งขึ้น อันนี้คือเป็นส่วนที่เน้น query performance
โอเค ต่อไปเราเซ็ต standard ใหม่ครับ เชิญครับ
การทำ Index ใน MongoDB: ESR Rule และ Best Practice17:17
โอเคครับ เป็นคำถามที่ดีครับ แน่นอนครับ ปกติแล้วก็คือ การทำ index มันจะมีทฤษฎีหนึ่งนะครับ ที่อาจจะดูบนเว็บไซต์ก่อนนะครับ ก็คือเรี ยกว่า ESR Equality นะครับ
แล้วก็ sorting นะครับ แล้วก็ range นะครับ เป็นกฎปกติที่อยู่บนเว็บไซต์นะครับ ซึ่งมันจะมี detail นะครับ ผมอาจจะบอกไม่ได้ในตอนนี้มันเยอะ เพราะ ESR rule จะเป็นตัวบอกนะครับ แล้วปกติแล้วเราควรมี index เขาบอกว่า best practice ควรมี index ต่อหนึ่ง collection ไม่ควรเกิน 4 สถานการณ์จริงผมเห็นสูงสุด 60 สูงสุดของ index ที่มีได้ 64 ตัว โอเคไหมครับ ในหนึ่ง collection นะ แต่ทุกครั้งที่เราทำเวลาโหลดขึ้น RAM RAM ไม่พอ ลองนึกภาพ 64 ตีไปซะว่า index หนึ่งใช้สอง GB ก็เอา 2×64 แรมเครื่องของคุณก็หมดแล้ว เพราะฉะนั้น โดยปกติแล้ว ค่าเฉลี่ยที่ผมเจอก็คือ โดยพื้นฐานประมาณ 10 เพราะเราควรมี index ไม่เกินประมาณ 10 ให้เต็มที่ และไม่ควรเกิน 20 collection เดียวนะครับ คุณนึกภาพนะ มีอีก 1 collection มี 10 index index ตัวนึงเนี่ย ใช้ RAM เป็นร้อยๆ MB คุณมีซัก 20 collection 100 collection คุณก็ไม่ไหว ปกติแล้ว MongoDB อนุญาตให้เรามี collection ได้ประมาณ ถ้าผมจำตัวเลขไม่ผิดนะครับ เป็นหลักหมื่นขึ้น ใน 1 database เลยนะ อนุญาตให้คุณมีเกิน 10,000 collection เกินกว่านั้นระบบจะยิ่งแบบ very slow มาก คือแบบอาจจะเกิดการพังได้ แต่อนุญาตได้ถึงขนาดนั้น ซึ่ง ผมบอกอย่างนี้ได้ เพราะว่าเราเจอลูกค้า
ที่เกินลิมิต คุณลองนึกภาพว่าออกแบบอย่างไร ให้มี collection เป็นหมื่นๆ collection อยู่ใน database ก้อนนั้น นะครับ อันนี้คือแชร์ให้ฟังเนาะ นะครับ อ๋อ มันออกไลฟ์ด้วยนี่? ไม่เป็นไร ไม่ได้พูดถึงใครนะครับ นั่นคือหมายความว่า อธิบาย index ว่าเราควรทำยังไงนะครับ มันจะมี detail นะครับ
มาตรฐานใหม่ของ Performance: เปรียบเทียบ MongoDB 8.0 กับเวอร์ชั่น 719:18
ต่อไปก็คือ พอเราพูดถึง set standard นะครับ เราก็จะมี standard นะครับ เขาก็จะมีการ improve on industry benchmark ก็คือเราบอกแล้วครับ เวอร์ชัน 8 เนี่ย เป็นเวอร์ชันที่แบบ ชูโรงเรื่อง performance มาก เมื่อเทียบกับ MongoDB เวอร์ชัน 7 เลยนะครับ เขาจะเทียบกับ 3 เจ้านี้ คุณเสิร์ชดูได้ ว่าเป็นเว็บไซต์
หรือเป็นเครื่องมือ ที่คน ที่อยู่ในอุตสาหกรรม database จะต้องใช้เครื่องมือเหล่านี้ วัดปร ะสิทธิภาพ จะ compare กับใครก็ตาม ไม่รู้ แต่คุณควรจะใช้อันนี้ ถ้าคุณพูดถึงเป็น product ประเภท database vendor เนาะนะครับ เราต้องอ้างอิง แต่ในที่นี้เราจะ compare กับ version 7 เรายังไม่ compare กับเจ้าอื่นเนาะนะครับ เพราะฉะนั้นใน performance นี่ครับ เราเทียบนะครับ ให้เห็นภาพนะครับ ว่าเรา bulk load เร็วขึ้น compare กับ version 7 เราเร็วขึ้น 54% นะครับ ในขณะที่ตัวนี้ออกเนี่ยมันออก มันภายในเนี่ยเค้าระบุตัวนี้ออกมาก่อนงานอยู่แล้วตั้งนาน ซึ่งมีคนเนี่ย อย่างเช่น เราเป็น engineer ผมเป็น consult engineer ใช่มั้ย มันจะมี software engineer, consult engineer หรือตัว product engineer นะครับ ทุกคนเมื่อรู้ภาพนี้ปุ๊บ ทุกคนมีการทดสอบเลยเพราะว่าลูกค้า บางกลุ่มจะถูกเรียกมาให้ใช้งาน ดังนั้นเขาจะวัดกัน ทุกคนก็จะเริ่มวัดทุกตัวเลย
นะครับ ข้อดีของการที่เราวัดก็คือว่า เราจะรู้ limitation สิ่งหนึ่งที่สำคัญมาก ก็คือผมเชื่อว่า หลายๆ database ทุกผลิตภัณฑ์นะครับ จำเป็นที่จะต้องระบุว่าตัวเองมีข้อจำกัดอะไร ผมเชื่อว่าทุก database เหมาะกับงานแต่ละงาน ในปริมาณ data ที่แตกต่างกัน
เราสามารถจูนได้ทั้งหมด ให้ครอบคลุมจักรวาลก็ได้แบบ ทุกธุรกิจเลยสามารถใช้ database ยี่ห้อเดียว แล้วก็สามารถทำได้ ถูกไหมครับ แต่เราจำเป็นต้องรู้ ข้อจำกัดของเขา เพื่อรู้ว่า โอเค ถ้าคุณอยากจะไปใช้แบบนี้ คุณยังจะแบบทู่ซี้ไปใช้ ธุรกิจแบบเนี้ย คุณจะต้องจูนมันยังไง limit เป็นแค่ไหน เราจะร ู้ นะครับ นั่นคือสิ่งสำคัญครับ ที่ผมบอกว่าทุก database ต้องเปิดเผย เราต้องมีการเรียนรู้เพื่อเราจะให้ความรู้แก่คนที่ใช้งาน หรือ developer ให้เข้าใจว่า ไม่ใช่แบบว่า โอเค คุณใช้เนี่ยเจ๋ง แต่ว่าคุณรู้ไหมว่า limit มันอยู่ตรงไหน ผมเป็นคนหนึ่งที่รู้ limit ค่อนข้างเยอะ เพราะว่าลูกค้าถามมาว่า โอเค ตรงนี้ทำไมมันถึงพัง ตรงนี้มันถึง มันถึงไม่ผ่าน เราก็จะไปค้นหา เราก็จะรู้ว่า โอเค มันคือ limitation เราก็สามารถให้คำแนะนำได้ว่า โอเค limitation แบบนี้ควรจะแก้ท่าไหน ถ้าคุณอยาก จะยังคงใช้ MongoDB ของเราอยู่ เราสามารถจะใช้ท่าซิกแซกแบบไหนได้บ้าง เป็นต้น
เขาจะเห็นภาพว่ามันโหลดเร็วขึ้น มัน read เร็วขึ้น ภาพเห็นก็คือเป็นการ compare based on version 7 นะครับ ขอย้ำนะ เป็นการ based version 7 ไม่ได้เปรียบเทียบ database ยี่ห้อใดๆ แต่เปรียบเทียบของตัวเองนะครับ
ต่อไปนะครับ เรามาพูดถึงตัว
Time Series Collection: จัดเก็บข้อมูล Real-time ได้ดีขึ้น22:11
performance นะครับ เป็นเรื่องของตัว time series ทุกคนรู้จัก time series ไหมครับ
time series ก็คือมันเป็นโครงสร้างของ collection พิเศษนะครับ ที่ถูกออกแบบมาให้เก็บข้อมูลเกี่ยวกับเวลา เรามักจะใช้ time series collection นะครับ ไว้สำหรับเก็บข้อมูลที่มีการ run แบบ real-time แล้วก็ดูเป็นเวลา เช่น พวกกราฟต่างๆ พวกที่เป็น crypto พวกที่เป็น crypto พวกที่เป็นการเงินนะครับ เรามีธุรกิจลักษณะนั้นนะครับ แล้วเราก็ ทำการที่จะออกแบบใส่ time series เข้าไป ซึ่ง time series จะมีปัญหาหนึ่งก็คือเรื่องการ group เพราะว่าเราต้อง group ถูกไหม เช่น ข้อมูลที่เป็นประเภท Internet of Things เซ็นเซอร์ทั้งหมดเนี่ย วิ่งเร็วขนาดไหน เรารู้อยู่แล้วตามโรงงาน เซ็นเซอร์จะวิ่งหรือยิง หรือแบบกระทั่งกล้องวงจรปิดที่เราเห็นอยู่ มันอาจจะส่งข้อมูลไป ดังนั้นข้อมูลมันจะวิ่งเร็วมากเป็นระดับวินาที เพราะฉะนั้นการ grouping ข้อมูลวินาที แปลว่าข้อมูลอาจจะเป็นแบบล้าน document ขึ้นไป
ดังนั้นการ group นะครับ เป็นหนึ่งในคำสั่งที่จะเรียกว่า block
บล็อกการทำงาน แปลว่ามันไม่สามารถจะ run แบบ parallel ได้ มันจะบล็อกให้หยุดการทำงานก่อน