Screen Shot 2558-01-05 at 11.49.31 AM
ถ้าใครเคยใช้งาน MongoDB จะรู้ว่า
มันคือ Schemaless database

แล้ว Schemaless มันคืออะไร ?

MongoDB คือ ที่จัดเก็บข้อมูลในรูปแบบ JSON
โดยเอกสารที่จัดเก็บนั้น ประกอบไปด้วยกลุ่มของ filed
และ field ก็จะมีชนิดข้อมูลที่หลากหลายกัน

แต่มันไม่ได้บอกว่า ไม่มี schema ใช่ไหม ?
เนื่องจาก schema นั้นมันอยู่ในหลายรูปแบบ เช่น

  • อยู่ในหัวของคุณไงล่ะ ตอนที่คุณออกแบบโครงสร้างข้อมูลไงล่ะ อย่าบอกว่าไม่มีนะ
  • อยู่ใน database ที่เก็บข้อมูลไงล่ะ
  • อยู่ในการพัฒนาเพื่อสร้างระบบให้เป็นไปตาม requirement

และทุกครั้งที่คุณทำผิดพลาด หรือ requirement มันเปลี่ยนแปลง
คุณจะต้องทำการ migrate data เสมอ

Schemaless กับ Schemaful มันต่างกันอย่างไร ?

ใน Schemaful database หรือ SQL ที่เราใช้กันนะ
เช่นถ้าต้องการเพิ่ม field ให้เข้ามายัง table ที่ต้องการ

SQL สำหรับเพิ่ม field GPA ไปยัง table STUDENT ด้วยคำสั่ง

ALTER TABLE student ADD gpa VARCHAR(10);

ผลจากคำสั่งนี้
จะทำการเพิ่ม field GPA ไปยังทุกๆ row ใน table STUDENT
โดยที่ข้อมูลเก่าหรือที่มีอยู่ ค่าใน field GPA มีค่าเป็น NULL
และทำการแก้ไข code

ถ้าต้องการ rollback สามารถทำได้ด้วยคำสั่ง

ALTER TABLE student DROP gpa;

ผลจากคำสั่งนี้
จะทำการลบ field GPA ออกไปในทุกๆ row
ยังไม่พอต้องทำการแก้ไข หรือ rollback code นะ

ข้อสรุปจากตัวอย่างนี้ได้ว่า

  • เชื่อไหมว่าเราจัดการกับ Schemaless แบบนี้ ?
  • เราต้องการันตีในการ migrate ?
  • เราต้องการันตีความถูกต้องของข้อมูลเมื่อทำการ rollback ?

มันแตกต่างจาก SQL ตรงไหนนะ ?

เรื่องจริงที่เกี่ยวกับ NoSQL และ Schemaless !!

คุณคิดว่า NoSQL มันคือ No, SQL หรือเปล่านะ ?

แล้ว Schemaless นั้น เราหมายถึงอะไรนะ ?

เราหมายถึง Dynamic type schema หรือเปล่านะ
นั่นคือ schema สามารถปรับเปลี่ยนได้ง่าย และ ได้ตลอดเวลา หรือเปล่านะ

ซึ่งมันแตกต่างจาก SQL database ที่เป็น static type schema
และ JSON ก็ยังถูกใช้งาน และเหมาะสมกว่า XML ในโลกของ Schemaless (Dynamic type)

ดังนั้นเรื่องนี้มันสำคัญมากๆ คุณต้องเข้าใจมันก่อนว่า
จะอย่างไรคุณก็ต้องมี schema ไว้เสมอ
แล้วคุณล่ะคิดว่าอย่างไรกันบ้าง ?

Tags: