การเก็บข้อมูลตำแหน่งภูมิศาตร์กับ Redis (Geospatial)

การเก็บข้อมูลตำแหน่งภูมิศาตร์ใน Redis (Geospatial)

Redis นอกจากจะเก็บข้อมูลที่เป็น key and value แล้วก็ยังมีอีกความสามารถพิเศษอีกอย่างนึง คือสามารถใช้เก็บข้อมูลทางภูมิศาตร์ ซึ่งจะเก็บข้อมูลที่เป็น latitude กับ longitude ได้ด้วย blog นี้เราจะมาดูว่ามันคืออะไร ใช้งานอย่างไร แล้ว use cases ที่เราเอาไปใช้งานได้มีอะไรบ้าง Background ถ้าเรามีโจทย์มาว่าต้องออกแบบระบบให้เก็บข้อมูลที่เป็นพิกัดของสถานที่ ลงใน database เราจะเก็บมันยังไงครับ ตัวอย่างเช่น ผมต้องการเก็บตำแหน่งของสาขาของร้านสะดวกซื้อ 7-11 ทั้งหมดในกรุงเทพ แบบตัวอย่างข้อมูลข้างล่างนี้ latitude longitude location 13.75759654737684 100.56426644232188 7-11 Rama 9 13.803052551902061 100.55536933330103 7-11 Phahonyothin 13.779830852003741 100.54371735141898 7-11 Ari ถ้าเราเก็บ Latitude, Longitude, Location แยกเป็นแต่ละคอลัมน์ หรือ field ใน database แบบ ตารางข้างบน ก็ดูไม่มีปัญหาอะไรใช่ไหมครับ เราสามารถ query ตำแหน่งของสถานที่ที่เราต้องการอยากรู้ได้ แต่ถ้าเราต้องการอยากรู้ว่า จากตำแหน่งที่เรายืนอยู่เนี่ย มี 7-11 ไหนที่ไกล้ที่สุด (คล้ายๆ กับเวลาเสิร์ชหา 7-11 ใน Google Maps) เราจะ query มันยังไงครับ 🤔...

January 14, 2024 · jiradeto
Docker layer กับการ caching

Docker layer กับการ caching

ยุคนี้ผมคิดว่าทุกคนคงใช้ Docker ในการทำงานกันอยู่แล้ว วันนี้อยากเขียนสั้นๆ เบื้องหลังการทำงานเวลาที่เรารัน build docker image จาก Dockerfile ว่ามันมีอะไรเกิดอะไรขึ้นบ้าง สามารถทำยังไงให้มันเร็วขึ้นได้ และวิธีการเรียงลำดับ instruction ใน Dockerfile Dockerfile ในการสร้าง Docker image เราจะต้องกำหนดสิ่งที่เราต้องการ (instruction) ใน image ของเรา เช่นจะลง OS อะไร หรือลง dependencies ตัวไหน version อะไร ซึ่งเราจะเขียนทั้งหมดที่เราต้องการไว้ใน Dockerfile ไฟล์นี้เป็นเหมือนแม่พิมพ์สำหรับ image ของเรา ถ้าเปรียบเทียบกับโลก OOP ตัว Docker image เป็นเหมือน Class ส่วนตัว container เป็นเหมือน instance ของ class นั้นๆ ที่เราได้สร้างขึ้น เราสามารถสร้าง container มาเท่าไรก็ได้จาก image ที่เราได้สร้างไว้ FROM ubuntu:18.04 COPY . /app RUN make /app CMD python /app/app.py ตัวอย่าง Dockerfile ที่จะสร้าง Docker image ที่ใช้ ubuntu เวอร์ชั่น 18....

December 5, 2022 · jiradeto