![git-nosql]()
![git-nosql]()
ช่วงวันหยุดมีคำถามที่น่าสนใจเกี่ยวกับ Git ขึ้นมาคือ
ถ้าต้องการเก็บข้อมูลต่าง ๆ ด้วย Git ล่ะ
ให้เหมือนกับ NoSQL database ล่ะ
จะทำอย่างไรดี ?
ดังนั้นมาลองใช้งานกันหน่อยสิ
เริ่มด้วยวิธีการง่าย ๆ
ทำการบันทึกและอ่านข้อมูล
[code]
//บันทึกข้อมูล
$ 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
[/code]
ซึ่งเป็นการจัดการข้อมูลในรูปแบบ
Key-value database
โดย key คือ path เต็ม ๆ ของไฟล์ที่เราต้องการ
ส่วน value คือ ข้อมูลที่อยู่ในไฟล์
แต่วิธีการนี้ก็มีข้อเสียคือ
- ต้องทำการบันทึกข้อมูลลงไฟล์ก่อน จากนั้นจึงบันทึกข้อมูลเข้า git ซึ่งทำให้เสียเวลา
- ขั้นตอนการบันทึกข้อมูลเยอะเกินไป
- ถ้าไฟล์ที่ต้องการอยู่ใน path ลึก ๆ น่าจะแย่นะ
ดังนั้นถ้าต้องการแก้ไขปัญหานี้ล่ะ ทำอย่างไรดี ?
โดยใน Git นั้นสามารถทำการ hashing และจัดเก็บข้อมูลผ่าน standard input ได้เลย
ซึ่งผลที่ได้คือ ขั้นตอนการบันทึกข้อมูลง่ายขึ้นมาก
รวมทั้งผลที่ได้จากการบันทึกคือ key ที่ unique
เพื่อใช้อ้างถึงเอกสารนั้น ๆ ได้เลย
สามารถทำได้ดังนี้
[code]
//บันทึกข้อมูล
$ echo '{"id": 1, "name": "Somkiat", "age": 30}' | git hash-object -w --stdin
f8d407f8880d3126c45cc38dee9f025ddcd816ad
//อ่านข้อมูล
$ git cat-file -p f8d407f8880d3126c45cc38dee9f025ddcd816ad
{"id": 1, "name": "Somkiat", "age": 30}
[/code]
เพิ่งรู้เลยว่า Git มันก็ทำแบบนี้ได้ด้วย
จากนั้นก็นำไปสร้างระบบแบบง่าย ๆ กันได้เลย
อ่านข้อมูลเพิ่มเติมจาก Link ด้านล่างได้เลยครับ
มีรายละเอียดเชิงเลิกอีกมากมายให้เราได้เรียนรู้กันต่อไป เช่น
การ uddate ข้อมูล
การจัดการ version ของข้อมูล
Reference Websites
https://www.kenneth-truyers.net/2016/10/13/git-nosql-database/