ปัจจุบันนี้ internet of thing หรือ IoT ก็ได้เข้ามามีบทบาทในอุตสาหกรรมและเทคโนโลยี ซึ่งใน สถาปัตยกรรมของ IoT เอง ก็มีหลายชั้น ตั้งแต่เซ็นเซอร์เก็บข้อมูล ชั้นเก็บข้อมูล รวมไปถึงการแสดงข้อมูลให้ผู้ใช้ ตามรูป IoT Wolrd Forum ได้ทำรูปอ้างอิงลำดับชั้นของ IoT
ตรงนี้ขอไม่ลงรายละเอียดของ IoT มากนัก จากรูปข้างบน เราจะเห็นได้ว่าตั้งแต่ layer ที่ 1 ถึง layer ที่ 7 หรือก็คือตั้งแต่เซนเซอร์หรืออุปกรณ์ที่รวบรวมหรือทำงานหรือควบคุม ต่างๆ ไปจนถึงชั้นของ application และการจัดการ โดยในบทความนี้จะกล่าวถึงฐานข้อมูล OpenTSDB ซึ่งจะอยู่ใน Layer ที่ 4-5
IoT เองก็เก็บข้อมูลในลักษณะอนุกรมเวลาเป็นส่วนใหญ่ รวมถึงสัญญาไฟฟ้า (signal) สัญญาณดิจิตอลเองก็เป็นอนุกรมเวลา แต่เมื่อข้อมูลใหญ่มากขึ้นการจัดเก็บข้อมูลอนุกรมเวลาในรูปแบบเดิมๆ อาจจะทำให้ระบบทำงานช้ากว่าที่ควรจะเป็น เช่น general purpose database อย่าง MySQL, PostgreSQL
แล้วอนุกรมเวลาคืออะไร ลองไปดูกันครับ
จริงๆ ถ้าคนเรียนสายคณิตศาสตร์คงคุ้นเคยกับคำๆ นี้ดีอยู่แล้ว แต่ผมขออธิบายง่ายๆ อย่างนี้นะคับ
สมมติว่า ถ้าเราวัดอุณหภูมิของ อ.หาดใหญ่ ทุกๆ ชั่วโมงตั้งแต่ 9 โมงเช้าถึง 6 โมงเย็น แล้วเราก็จดอุณหภูมิไว้ เราก็สามารถนำข้อมูลมาพล็อตเป็นกราฟ ในรูปข้างล่างทางขวามือได้ นี่คือ อนุกรมเวลาแบบง่ายๆ คับ คือมี เวลากับค่าที่เราบันทึก
อนุกรมเวลา ก็คือ ชุดข้อมูลที่เรียงลำดับตามเวลา โดยอนุกรมเวลาประกอบไปด้วยจุดข้อมูล (data point) ซึ่งในแต่ละจุดข้อมูลมีเวลาที่บันทึก และค่าที่วัดได้ ณ เวลานั้นๆ ข้อมูลอนุกรมเวลาส่วนใหญ่แล้วใช้ในการจัดเก็บข้อมูลจากสภาพแวดล้อมต่างๆ ขึ้นอยู่กับการใช้งาน โดยในหลายๆงานก็ได้นำข้อมูลอนุกรมเวลาไปใช้ เช่น การพยากรณ์สภาพอากาศ, ระบบคอมพิวเตอร์, การจราจร, กระบวนทางเคมี หรือแม้กระทั่ง การพยากรณ์แนวโน้มของราคาหุ้น
ตัวอย่างของข้อมูลอนุกรมเวลาในกรณีของการเก็บข้อมูลสภาพอากาศ เช่น
ระยะห่างระหว่างเวลาที่บันทึกของข้อมูลแต่ละจุดจะเป็นเท่าใดก็ได้
ช่วงนี้ฐานข้อมูลอนุกรมเวลาเริ่มดังกันขึ้นเยอะแล้ว จากข่าวที่ฐานข้อมูลอนุกรมเวลา Prometheus เข้าร่วมกับ Cloud Native Computing Foundation หลังจากที่ศึกษามาสักพักเปเปอร์ survey ด้าน time series ก็ออกมาแล้วครับ Time Series Management Systems: A Survey จึงเป็นโอกาสที่ดีจะเขียนบทความถึงฐานข้อมูลอนุกรมเวลาครับ
ทำไมถึงได้มีฐานข้อมูลอนุกรมเวลาเกิดขึ้นแล้วเหมาะสำหรับระบบแบบไหน?
คุณ Søren ในเปเปอร์ survey บอกว่า TSMS (Time Series Management System) หรือ TSDB (Time Series Database) ก็ได้ ถ้าเป็น TSMS จะครอบคลุมความหมายมากกว่า เพราะบางระบบไม่ใช่แค่ฐานข้อมูล โดยฐานข้อมูลอนุกรมเวลาเกิดขึ้นจากความต้องการที่เฉพาะเจาะจงมากขึ้น ดังนี้
หลายๆ คนอาจจะสงสัยว่าแล้วที่บอกว่าข้อมูลอนุกรมขนาดใหญ่นี้ มันใหญ่ขนาดไหนถึงต้องไปใช้ฐานข้อมูลอนุกรมเวลา ตรงนี้ผมขอยกตัวอย่างงานวิจัยของ Facebook ครับ โดยเค้าต้องการ จะทำ server สำหรับ monitor ข้อมูลของทุก cluster ของ Facebook ครับ
ซึ่งโจทย์คือต้องสามารถตรวจสอบความผิดปกติได้อย่างรวดเร็ว ดังนั้นเค้าจึงออกแบบฐานข้อมูลอนุกรมเวลาที่อยู่บนแรมครับที่ชื่อว่า Gorilla เพื่อให้ต้องการ monitor แบบ real time ลองมามาดูโจทย์ของ Facebook กันครับ
เป็นไงกันบ้างครับ ข้อมูลเยอะมากใช่มั้ย นี่คือตัวอย่างงานแบบ monitoring ถ้าเราไม่ต้องการ real time แบบนี้ ก็ไม่ต้องเก็บข้อมูลบนแรมก็ได้คับ โดยปกติจะเก็บของข้อมูลบน Harddisk ขึ้นอยู่กับ requirements คับ
มาถึงตรงนี้ แล้วฐานข้อมูลอนกรุมเวลาคืออะไร?
ฐานข้อมูลแบบอนุกรมเวลา คือฐานข้อมูลที่ถูกพัฒนาและปรับปรุงมาเพื่อเก็บข้อมูลในงานทางด้านอนุกรมเวลาโดยเฉพาะ ฐานข้อมูลแบบอนุกรมเวลาส่วนใหญ่แล้วจะถูกปรับแต่งให้เหมาะกับข้อมูลที่มีปริมาณมาก และสามารถที่จะจัดเก็บจุดข้อมูลของอนุกรมเวลาและคำอธิบายเพิ่มเติมของข้อมูลนั้นๆ เท่านั้น
ดังนั้นฐานข้อมูลแบบอนุกรมเวลาสามารถจัดการข้อมูลแบบอนุกรมเวลาได้เหมาะสมกว่าฐานข้อมูลอเนกประสงค์ทั่วๆ ไป เช่น ฐานข้อมูลแบบมีความสัมพันธ์ (Relational database) หรือฐานข้อมูลแบบไม่มีความสัมพันธ์ (Non-relational database)
อีกทั้งฐานข้อมูลแบบนี้ยังสามารถค้นหาข้อมูลแบบอนุกรมเวลา เลื่อนช่วงของเวลาที่ต้องการสอบถาม รวมหลายๆ อนุกรมเวลาเข้ามาเป็นหนึ่งอนุกรมเวลา หรือคำนวณเพื่อหาค่าของจุดที่หายไปของอนุกรมเวลา (interpolation)
ปัจจุบันยังไม่มีมาตรฐานการออกแบบและการเชื่อมต่อที่ชัดเจนที่จะอธิบายว่าฐานข้อมูลแบบอนุกรมเวลานั้นควรเป็นแบบไหน และมีการเชื่อมต่ออย่างไร หลายๆ องค์กรได้มีความพยายามที่จะสร้างฐานข้อมูลแบบอนุกรมเวลาสำหรับใช้ในองค์กร ซึ่งแต่ละผู้พัฒนาได้ออกแบบความสามารถและ API ของตนแตกต่างกันไป
ฐานข้อมูลอนุกรมเวลาส่วนใหญ่แล้วมักจะมี 4 องค์ประกอบ คือ
ซึ่งบางฐานข้อมูลอนุกรมเวลามีองค์ประกอบไม่ครบ แต่ฐานข้อมูลเหล่านั้นมักอนุญาตให้เชื่อมต่อกับภายนอก ยกตัวอย่างเช่น OpenTSDB มีส่วนของแสดงผลที่เหมาะสำหรับการใช้งานที่ไม่ซับซ้อน แต่ OpenTSDB ก็สามารถเชื่อมต่อกับโปรแกรมประยุกต์เพื่อการแสดงผลอนุกรมเวลา เช่น Grafana ได้
Grafana คือ หน้าต่างอเนกประสงค์สำหรับแสดงผลข้อมูลอนุกรมเวลา
และมีส่วนขยายสำหรับการเชื่อมต่อกับ OpenTSDB อีกด้วย
ประเภทงานส่วนใหญ่ของการใช้ฐานข้อมูลแบบอนุกรมเวลาคือการสอบถามข้อมูลอนุกรมเวลา ฐานข้อมูลแบบอนุกรมเวลาส่วนใหญ่จะมีการออกแบบที่ทำให้สะดวกต่อการใช้ค้นหาตามช่วงของเวลา สมมติว่า เราต้องการสอบถามข้อมูลอุณหภูมิที่จัดเก็บไว้ในฐานข้อมูลอยู่ก่อนแล้วจากปีค.ศ. 2013 ถึง 2016 จากข้อมูลตัวอย่าง มีข้อมูลจำนวน 1 ล้านจุดต่อข้อมูลระยะเวลา 1 ปี คำสั่งในการสอบถามมีลักษณะได้หลากหลายรูปแบบ โดยรูปแบบข้างล่างนี้เป็นตัวอย่างอย่างง่ายในการสอบถามข้อมูล
QUERY temperature FROM 2013 TO 2016
ผลลัพธ์การสอบถามจะเป็นในรูปแบบของอาร์เรย์ของจุดข้อมูล โดยผลลัพธ์จะมี 3 ล้านจุดข้อมูล และผลลัพธ์ที่ได้ยังสามารถนำไปแสดงผลเป็นกราฟอนุกรมเวลา
ฐานข้อมูลแบบอนุกรมเวลาแบบ Open Source ที่ได้รับความนิยม เช่น OpenTSDB, KairosDB, InfluxDB, Prometheus และ Elasticsearch จริงๆ ก็มีอีกหลายตัวที่ไม่ได้ยกตัวอย่างมาครับ
ไว้พบกันใหม่โอกาสหน้าครับ สวัสดีครับ
Cross published at Medium.com