git-nosql
ช่วงวันหยุดมีคำถามที่น่าสนใจเกี่ยวกับ Git ขึ้นมาคือ
ถ้าต้องการเก็บข้อมูลต่าง ๆ ด้วย Git ล่ะ
ให้เหมือนกับ NoSQL database ล่ะ
จะทำอย่างไรดี ?

ดังนั้นมาลองใช้งานกันหน่อยสิ

เริ่มด้วยวิธีการง่าย ๆ

ทำการบันทึกและอ่านข้อมูล

//บันทึกข้อมูล
$ echo '{"id": 1, "name": "Somkiat", "age": 30}' > 1.json
$ git add 1.json
$ git commit -m "Add new data"

//อ่านข้อมูล
$ git show master:1.json
{"id": 1, "name": "Somkiat", "age": 30}
Raw

ซึ่งเป็นการจัดการข้อมูลในรูปแบบ Key-value database
โดย key คือ path เต็ม ๆ ของไฟล์ที่เราต้องการ
ส่วน value คือ ข้อมูลที่อยู่ในไฟล์
แต่วิธีการนี้ก็มีข้อเสียคือ

  • ต้องทำการบันทึกข้อมูลลงไฟล์ก่อน จากนั้นจึงบันทึกข้อมูลเข้า git ซึ่งทำให้เสียเวลา
  • ขั้นตอนการบันทึกข้อมูลเยอะเกินไป
  • ถ้าไฟล์ที่ต้องการอยู่ใน path ลึก ๆ น่าจะแย่นะ

ดังนั้นถ้าต้องการแก้ไขปัญหานี้ล่ะ ทำอย่างไรดี ?

โดยใน Git นั้นสามารถทำการ hashing และจัดเก็บข้อมูลผ่าน standard input ได้เลย
ซึ่งผลที่ได้คือ ขั้นตอนการบันทึกข้อมูลง่ายขึ้นมาก
รวมทั้งผลที่ได้จากการบันทึกคือ key ที่ unique
เพื่อใช้อ้างถึงเอกสารนั้น ๆ ได้เลย
สามารถทำได้ดังนี้

//บันทึกข้อมูล
$ echo '{"id": 1, "name": "Somkiat", "age": 30}' | git hash-object -w --stdin
f8d407f8880d3126c45cc38dee9f025ddcd816ad

//อ่านข้อมูล
$ git cat-file -p f8d407f8880d3126c45cc38dee9f025ddcd816ad
{"id": 1, "name": "Somkiat", "age": 30}

เพิ่งรู้เลยว่า Git มันก็ทำแบบนี้ได้ด้วย

จากนั้นก็นำไปสร้างระบบแบบง่าย ๆ กันได้เลย
อ่านข้อมูลเพิ่มเติมจาก Link ด้านล่างได้เลยครับ
มีรายละเอียดเชิงเลิกอีกมากมายให้เราได้เรียนรู้กันต่อไป เช่น
การ uddate ข้อมูล
การจัดการ version ของข้อมูล

Reference Websites
https://www.kenneth-truyers.net/2016/10/13/git-nosql-database/

Tags:,