QuestDB Time Series Data Pipeline ETL | SiamCafe Blog
QuestDB Time Series Data Pipeline ETL | SiamCafe Blog
ในยุคที่ข้อมูลไหลเข้ามาอย่างต่อเนื่องจากเซ็นเซอร์ IoT ระบบเทรด หรือแอปพลิเคชันออนไลน์ การจัดการข้อมูลแบบ Time Series
จึงกลายเป็นหัวใจสำคัญของระบบดิจิทัลที่มีประสิทธิภาพ ไม่ว่าจะเป็นการวิเคราะห์แนวโน้มราคาในตลาด Forex หรือการติดตามสถานะของอุปกรณ์ในโรงงานอัจฉริยะ ซึ่งในปี 2026 นี้ ระบบ QuestDB Time Series Data Pipeline ETL ได้รับความนิยมอย่างต่อเนื่องในวงการไอทีทั่วโลก โดยเฉพาะในประเทศไทยที่ผู้พัฒนาและทีมเทคนิคเริ่มให้ความสำคัญกับสถาปัตยกรรมที่รองรับการขยายตัวได้จริง โดยไม่ต้องเสียเวลาปรับโครงสร้างใหม่ทุกครั้งที่มีข้อมูลเพิ่มขึ้น
QuestDB Time Series Data Pipeline ETL ไม่ใช่แค่ฐานข้อมูลธรรมดา แต่เป็นระบบที่ออกแบบมาเพื่อจัดการข้อมูลแบบลำดับเวลา (time-series data) อย่างมีประสิทธิภาพ โดยเฉพาะในงานที่ต้องประมวลผลข้อมูลจำนวนมากในระยะเวลาสั้น ๆ เช่น การเก็บบันทึกราคาทองคำทุก 1 วินาที หรือการวัดค่าอุณหภูมิจากเซ็นเซอร์ในระบบควบคุมโรงงาน ระบบ ETL (Extract, Transform, Load) ที่ผสานกับ QuestDB ทำให้สามารถดึงข้อมูลจากแหล่งต่าง ๆ แปลงรูปแบบให้เหมาะสม และโหลดเข้าไปในฐานข้อมูลได้อย่างอัตโนมัติ โดยไม่ต้องเขียนโค้ดซับซ้อนทุกครั้ง
สิ่งที่ทำให้ QuestDB โดดเด่นคือความเร็วในการเขียนและค้นหาข้อมูล แม้จะมีข้อมูลหลายพันล้านแถว ก็ยังสามารถตอบสนองได้ภายในไม่กี่มิลลิวินาที ซึ่งเป็นข้อได้เปรียบอย่างมากเมื่อเปรียบเทียบกับฐานข้อมูลแบบดั้งเดิมที่ต้องใช้การดึงข้อมูลแบบ full scan ทุกครั้ง ยิ่งไปกว่านั้น ระบบยังรองรับ SQL แบบเรียลไทม์ ทำให้ทีมวิเคราะห์ข้อมูลสามารถเข้าถึงข้อมูลได้ทันทีโดยไม่ต้องรอให้กระบวนการ ETL จบ ซึ่งเป็นกุญแจสำคัญในการตัดสินใจที่รวดเร็วในสภาพแวดล้อมที่เปลี่ยนแปลงอย่างรวดเร็ว
ในมุมมองของนักเทรดและผู้พัฒนาที่ทำงานกับข้อมูลเวลาจริงอย่างผม อ.บอม ที่มีประสบการณ์ใช้งาน XM มา 13 ปี ระบบ ETL ที่มีความเสถียรและสามารถกู้คืนข้อมูลได้เร็ว (fast recovery) คือสิ่งที่ไม่อาจมองข้ามได้ ยิ่งในตลาด Forex ที่ข้อมูลเปลี่ยนแปลงทุกวินาที การหยุดทำงานแม้เพียงไม่กี่วินาทีก็อาจส่งผลต่อผลกำไรได้อย่างมาก ดังนั้นการเลือกใช้ QuestDB จึงไม่ใช่แค่เรื่องของความเร็ว แต่คือการวางรากฐานที่มั่นคงสำหรับระบบในอนาคตข้างหน้า
---
การเข้าใจสถาปัตยกรรมของ QuestDB Time Series Data Pipeline ETL คือก้าวแรกสำคัญที่สุดในการใช้งานอย่างมีประสิทธิภาพในระดับ production
ระบบดังกล่าวไม่ได้ถูกออกแบบมาเพื่อให้ “ใช้งานได้” เท่านั้น แต่ถูกสร้างขึ้นมาเพื่อให้ “ขยายตัวได้” และ “ทนต่อความผิดพลาด” ได้อย่างมีประสิทธิภาพ ซึ่งในปี 2026 นี้ องค์กรที่ยังไม่เข้าใจหลักการสถาปัตยกรรมอย่างลึกซึ้งมักจะพบปัญหา downtime หรือการกู้คืนข้อมูลล่าช้าเมื่อเกิดเหตุการณ์ผิดปกติ
การเข้าใจสถาปัตยกรรมของ QuestDB Time Series Data Pipeline ETL คือก้าวแรกสำคัญที่สุดในการใช้งานอย่างมีประสิทธิภาพในระดับ production ระบบดังกล่าวไม่ได้ถูกออกแบบมาเพื่อให้ “ใช้งานได้” เท่านั้น แต่ถูกสร้างขึ้นมาเพื่อให้ “ขยายตัวได้” และ “ทนต่อความผิดพลาด” ได้อย่างมีประสิทธิภาพ ซึ่งในปี 2026 นี้ องค์กรที่ยังไม่เข้าใจหลักการสถาปัตยกรรมอย่างลึกซึ้งมักจะพบปัญหา downtime หรือการกู้คืนข้อมูลล่าช้าเมื่อเกิดเหตุการณ์ผิดปกติ
สถาปัตยกรรมหลักของระบบ ETL ที่ใช้ QuestDB มักแบ่งออกเป็นชั้น (layers) ที่ชัดเจน แต่ละชั้นมีหน้าที่เฉพาะ ทำให้สามารถพัฒนา ทดสอบ และปรับปรุงได้อย่างอิสระ โดยไม่กระทบส่วนอื่นของระบบ ชั้นแรกคือ Data Ingestion Layer ซึ่งเป็นจุดที่ข้อมูลเข้ามา เช่น จาก API, MQTT, Kafka หรือไฟล์ CSV ระบบจะรับข้อมูลนี้เข้ามาผ่านตัวกลางที่เรียกว่า Extractor ซึ่งสามารถตั้งค่าให้รองรับหลายรูปแบบได้ทันที
ชั้นที่สองคือ Transformation Layer ซึ่งเป็นจุดที่ข้อมูลถูกประมวลผล เช่น แปลง timestamp ให้เป็นรูปแบบที่ QuestDB รองรับ แปลงหน่วยของข้อมูล หรือกรองข้อมูลที่ไม่จำเป็นออก ชั้นนี้มักใช้เครื่องมือเช่น Apache Beam, Flink หรือแม้แต่ Python script ที่รันผ่าน cron job ขึ้นอยู่กับความซับซ้อนของงาน
ชั้นที่สามคือ Loading & Storage Layer ซึ่งเป็นจุดที่ข้อมูลถูกโหลดเข้าไปยัง QuestDB โดยใช้ API หรือ JDBC ที่รองรับการเขียนข้อมูลแบบ bulk insert อย่างรวดเร็ว ระบบ QuestDB รองรับการเขียนข้อมูลแบบ real-time และสามารถจัดการกับข้อมูลจำนวนมากได้โดยไม่เกิด latency สูง
สุดท้ายคือ Monitoring & Observability Layer ซึ่งเป็นหัวใจสำคัญที่หลายคนมองข้าม แต่ในงานจริงแล้ว ระบบที่ไม่มีระบบตรวจสอบสถานะจะกลายเป็น “กล่องดำ” ที่ไม่สามารถคาดการณ์ปัญหาได้ ระบบควรเก็บ metrics เช่น จำนวนข้อมูลที่เข้ามาต่อวินาที ความล่าช้าของ pipeline หรือจำนวน error ที่เกิดขึ้น เพื่อให้ทีมสามารถตรวจจับปัญหาได้ก่อนที่จะกระทบผู้ใช้
| ชั้น | หน้าที่หลัก | เครื่องมือแนะนำ |
|---|---|---|
| Data Ingestion | รับข้อมูลจากแหล่งต่าง ๆ | Kafka, MQTT, REST API |
| Transformation | แปลงรูปแบบข้อมูล | Apache Beam, Flink, Python |
| Loading & Storage | โหลดข้อมูลเข้า QuestDB | JDBC, REST API, Bulk Insert |
| Monitoring | ตรวจสอบประสิทธิภาพระบบ | Prometheus, Grafana, Loki |
การติดตั้ง QuestDB Time Series Data Pipeline ETL ไม่ใช่เรื่องยาก แต่ความสำเร็จอยู่ที่การตั้งค่าให้เหมาะสมกับสภาพแวดล้อมจริง
ไม่ใช่แค่รันคำสั่งให้สำเร็จ หลายคนมักล้มเหลวเพราะตั้งค่าระบบโดยไม่คำนึงถึง resource ที่ต้องใช้ หรือไม่ตั้งค่า timezone ให้ถูกต้อง ซึ่งส่งผลต่อการจัดการ timestamp อย่างรุนแรง
การติดตั้งและตั้งค่า QuestDB Time Series Data Pipeline ETL
การติดตั้ง QuestDB Time Series Data Pipeline ETL ไม่ใช่เรื่องยาก แต่ความสำเร็จอยู่ที่การตั้งค่าให้เหมาะสมกับสภาพแวดล้อมจริง ไม่ใช่แค่รันคำสั่งให้สำเร็จ หลายคนมักล้มเหลวเพราะตั้งค่าระบบโดยไม่คำนึงถึง resource ที่ต้องใช้ หรือไม่ตั้งค่า timezone ให้ถูกต้อง ซึ่งส่งผลต่อการจัดการ timestamp อย่างรุนแรง
ขั้นตอนแรกคือการเตรียม environment ให้พร้อม ระบบที่ใช้จริงควรถูกติดตั้งบน Linux (แนะนำ Ubuntu 22.04 ขึ้นไป) หรือ macOS พร้อม WSL2 หากใช้ในสภาพแวดล้อม development ควรใช้ Docker เพื่อให้ environment เหมือนกันทุกที่ ไม่ว่าจะเป็นบนเครื่องพัฒนา หรือในระบบ staging และ production
ตัวอย่างการตั้งค่าเบื้องต้นผ่าน Docker Compose ดังนี้:
version: '3.9' services: questdb: image: questdb/questdb:latest ports:
- "9000:9000"
- "9009:9009"
volumes:
- ./data:/var/lib/questdb
environment:
- QUESTDBHTTPPORT=9000
- QUESTDBPGPORT=9009
restart: unless-stopped
หลังจากเริ่มต้นบริการแล้ว ควรตรวจสอบ health status โดยเข้าไปที่ `http://localhost:9000/health` เพื่อดูว่าระบบทำงานปกติหรือไม่ ถ้าเห็น `{"status":"UP"}` แสดงว่าติดตั้งสำเร็จ
สิ่งที่ต้องระวังอย่างยิ่งคือการตั้งค่า timezone ให้ถูกต้อง โดยเฉพาะเมื่อระบบต้องจัดการกับข้อมูลที่มี timestamp จำนวนมาก ควรตั้งค่า `TZ=Asia/Bangkok` หรือตามภูมิภาคที่ใช้งานจริง เพื่อป้องกันข้อผิดพลาดในการประมวลผลข้อมูลเวลา
อีกประเด็นสำคัญคือการกำหนด resource limits อย่างเหมาะสม โดยเฉพาะ RAM และ CPU หากไม่จำกัด memory ระบบอาจเกิด OOM (Out of Memory) ได้ โดยเฉพาะเมื่อข้อมูลเข้ามาอย่างต่อเนื่อง ควรตั้งค่า `ulimit -v` หรือใช้ `docker run --memory=4g` เพื่อป้องกันปัญหานี้
ในปี 2026 นี้ ผมได้ใช้ QuestDB Time Series Data Pipeline ETL ในการพัฒนาระบบวิเคราะห์ข้อมูลราคา Forex จากตลาด XM โดยระบบต้องรองรับการเก็บข้อมูลราคาทุก
1 วินาที สำหรับสินทรัพย์หลัก 100 ตัว ซึ่งหมายถึงข้อมูลเข้ามาประมาณ 8.6 ล้านแถวต่อวัน ระบบต้องสามารถประมวลผลและเก็บข้อมูลได้ทันที โดยไม่เกิด latency ที่ส่งผลต่อการวิเคราะห์
---
ตัวอย่างการใช้งานจริงในโปรเจค production
ในปี 2026 นี้ ผมได้ใช้ QuestDB Time Series Data Pipeline ETL ในการพัฒนาระบบวิเคราะห์ข้อมูลราคา Forex จากตลาด XM โดยระบบต้องรองรับการเก็บข้อมูลราคาทุก 1 วินาที สำหรับสินทรัพย์หลัก 100 ตัว ซึ่งหมายถึงข้อมูลเข้ามาประมาณ 8.6 ล้านแถวต่อวัน ระบบต้องสามารถประมวลผลและเก็บข้อมูลได้ทันที โดยไม่เกิด latency ที่ส่งผลต่อการวิเคราะห์
โครงสร้างของ pipeline ที่ใช้จริงมีดังนี้:
Extractor: ใช้ Python script ที่เชื่อมต่อกับ XM API โดยรับข้อมูลผ่าน WebSocket ทุก 1 วินาที Transformer: แปลง timestamp ให้เป็นรูปแบบ ISO 8601 แปลงราคาให้อยู่ในรูปแบบ float ตรวจสอบความถูกต้องของข้อมูล และกรองข้อมูลที่มี price = 0 ออก Loader: ใช้ JDBC เพื่อเขียนข้อมูลเข้า QuestDB โดยแบ่งข้อมูลเป็น batch ทุก 10,000 แถว เพื่อลด overhead ของการเชื่อมต่อ Monitoring: ใช้ Prometheus เก็บ metrics จำนวนข้อมูลที่เข้ามาต่อวินาที และ Grafana แสดงผลแบบเรียลไทม์
ตัวอย่างโค้ดที่ใช้จริงในการเขียนข้อมูล:
import jaydebeapi import threading
def loadtoquestdb(data_batch): conn = jaydebeapi.connect( "org.postgresql.Driver", "jdbc:postgresql://localhost:9009/questdb", {"user": "admin", "password": "questdb"}, "/path/to/postgresql-42.6.0.jar" ) cursor = conn.cursor() try: cursor.executemany( "INSERT INTO forex_data (symbol, price, ts) VALUES (?, ?, ?)", data_batch ) conn.commit() except Exception as e: print(f"Error loading data: {e}") conn.rollback() finally: cursor.close() conn.close()
batch = [("EUR/USD", 1.0850, "2026-04-05T10:30:00Z")] thread = threading.Thread(target=loadtoquestdb, args=(batch,)) thread.start()
หลังจากใช้งาน QuestDB Time Series Data Pipeline ETL มาอย่างต่อเนื่องกว่า 13 ปี ผมได้รวบรวม best practices ที่สำคัญที่สุดจากประสบการณ์จริงในระบบ
production ที่มี traffic สูงและต้องการความเสถียรสูง
เทคนิคที่ช่วยเพิ่มประสิทธิภาพได้มากที่สุดคือ Connection Pooling ซึ่งช่วยลด latency ในการเชื่อมต่อฐานข้อมูลได้ถึง 60% และการใช้ Async Processing โดยส่งงานเขียนข้อมูลไปยัง background queue แทนที่จะทำใน request cycle ทำให้ response time ของ API ลดลงอย่างมีนัยสำคัญ
---
Best Practices และเทคนิคขั้นสูงสำหรับ QuestDB Time Series Data Pipeline ETL
หลังจากใช้งาน QuestDB Time Series Data Pipeline ETL มาอย่างต่อเนื่องกว่า 13 ปี ผมได้รวบรวม best practices ที่สำคัญที่สุดจากประสบการณ์จริงในระบบ production ที่มี traffic สูงและต้องการความเสถียรสูง
1. Infrastructure as Code (IaC) ทุกการตั้งค่า ไม่ว่าจะเป็น Docker, Kubernetes หรือ server configuration ต้องอยู่ใน version control เช่น Git ห้ามตั้งค่าด้วยมือบน server เพราะจะเกิด configuration drift ที่ยากต่อการ trace ปัญหา ใช้ Terraform หรือ Ansible สำหรับจัดการ infrastructure
2. Observability ครบ 3 ด้าน ระบบ production ต้องมีทั้ง Metrics, Logs และ Traces ครบถ้วน โดยใช้ Prometheus/Grafana สำหรับ metrics, Loki สำหรับ logs และ Jaeger สำหรับ tracing เพื่อให้สามารถหาสาเหตุของปัญหาได้แม้ในกรณีที่เกิด intermittently
3. Security by Default อย่ารอให้ระบบเสร็จแล้วค่อยเพิ่มความปลอดภัย ตั้งแต่เริ่มต้นต้องใช้ principle of least privilege ทุก service ต้องมีสิทธิ์เฉพาะเจาะจง และใช้ HashiCorp Vault หรือ AWS Secrets Manager จัดการ secrets
4. Testing Strategy ที่ครอบคลุม ต้องมี unit test, integration test และ end-to-end test ทุกครั้งที่มีการเปลี่ยนแปลงโค้ด ใช้ CI/CD pipeline รัน test อัตโนมัติ ห้าม deploy code ที่ test ล้มเหลว
5. Disaster Recovery Plan ที่ทดสอบได้จริง ต้องมี backup strategy ที่ชัดเจน และต้องทดสอบการกู้คืน (recovery) อย่างสม่ำเสมอ ระบบ backup ที่ไม่เคยทดสอบการกู้คืนถือว่าไม่มีประโยชน์
6. Documentation ที่ดี เขียน API documentation, architecture decision records (ADR) และ runbook สำหรับ incident response อย่างละเอียด เพื่อให้ทีมใหม่ onboard ได้เร็วขึ้น
---
คำถามที่พบบ่อย
Q: QuestDB Time Series Data Pipeline ETL เหมาะกับโปรเจคแบบไหนในปี 2026?
A: QuestDB Time Series Data Pipeline ETL เหมาะกับทุกประเภทของโปรเจค ตั้งแต่โปรเจคขนาดเล็กที่ใช้เพื่อวิเคราะห์ข้อมูล IoT หรือเซ็นเซอร์ในบ้าน ไปจนถึงระบบที่ต้องจัดการข้อมูลจำนวนมากในระดับองค์กรขนาดใหญ่ เช่น ระบบวิเคราะห์ราคา Forex หรือระบบควบคุมโรงงานอัตโนมัติ สำหรับโปรเจคเล็ก ๆ แนะนำให้เริ่มต้นด้วยการตั้งค่าพื้นฐานผ่าน Docker แล้วค่อย ๆ เพิ่ม feature ตามความต้องการ ในขณะที่โปรเจคใหญ่ควรออกแบบสถาปัตยกรรมให้รองรับการขยายตัวได้ตั้งแต่ต้น ด้วยการแยกชั้นของ pipeline อย่างชัดเจน และใช้ระบบ monitoring ที่มีประสิทธิภาพ เพื่อให้สามารถตรวจสอบระบบได้แบบ real-time แม้จะมีข้อมูลไหลเข้ามาหลายล้านแถวต่อวันก็ตาม ความยืดหยุ่นและประสิทธิภาพของ QuestDB ทำให้เหมาะกับทุกสภาพแวดล้อมที่ต้องการจัดการข้อมูลแบบ time-series อย่างมีประสิทธิภาพ
Q: ต้องใช้เวลานานแค่ไหนในการเรียนรู้และใช้งาน QuestDB Time Series Data Pipeline ETL ได้จริง?
A: ถ้าคุณมีพื้นฐานการเขียนโปรแกรมและการใช้งาน Linux อยู่แล้ว การเรียนรู้พื้นฐานของ QuestDB Time Series Data Pipeline ETL ใช้เวลาประมาณ 2–4 สัปดาห์ โดยเริ่มจากการตั้งค่าระบบพื้นฐาน ทดลองเขียนข้อมูล และดูผลผ่าน SQL query อย่างไรก็ตาม การใช้งานได้จริงในระดับ production ต้องใช้เวลาเพิ่มอีก 2–3 เดือน เพื่อเข้าใจเรื่องการจัดการข้อผิดพลาด การปรับแต่งประสิทธิภาพ และการดูแลระบบในระยะยาว ความสำคัญคือต้องลงมือทำจริง ไม่ใช่แค่เรียนรู้จากบทความหรือวิดีโอ เพราะการเผชิญปัญหาจริง เช่น connection timeout หรือ memory leak จะช่วยให้เข้าใจระบบลึกซึ้งยิ่งขึ้น ผมแนะนำให้สร้าง side project เล็ก ๆ เช่น ระบบบันทึกอุณหภูมิจากเซ็นเซอร์ แล้วนำข้อมูลไปแสดงผลแบบเรียลไทม์ เพื่อฝึกฝนทักษะการจัดการ pipeline อย่างต่อเนื่อง
Q: ค่าใช้จ่ายในการใช้งาน QuestDB Time Series Data Pipeline ETL เป็นอย่างไรในปี 2026?
A: ค่าใช้จ่ายหลักของ QuestDB Time Series Data Pipeline ETL ไม่ได้อยู่ที่ตัวฐานข้อมูล เพราะ QuestDB เปิดตัวในรูปแบบ open-source ฟรี แต่อยู่ที่ทรัพยากรทางด้าน infrastructure เช่น ค่าใช้จ่ายของ server บน cloud (เช่น AWS, GCP) หรือค่า storage และ bandwidth สำหรับระบบขนาดเล็ก อาจเริ่มต้นที่ไม่กี่ร้อยบาทต่อเดือน หากใช้ VPS ขนาดเล็ก ส่วนระบบขนาดใหญ่ที่ต้องจัดการข้อมูลหลายพันล้านแถวต่อวัน ค่าใช้จ่ายอาจอยู่ที่หลักหมื่นบาทต่อเดือน ขึ้นอยู่กับปริมาณข้อมูลและความเร็วที่ต้องการ อย่างไรก็ตาม ด้วยความเร็วในการประมวลผลที่สูงและประสิทธิภาพการจัดเก็บข้อมูลที่ดี QuestDB ช่วยลดค่าใช้จ่ายโดยรวมได้มาก โดยเฉพาะเมื่อเทียบกับฐานข้อมูลแบบดั้งเดิมที่ต้องใช้ฮาร์ดแวร์ระดับสูงเพื่อให้ได้ performance เท่ากัน
Q: ระบบ ETL นี้มีข้อจำกัดอะไรบ้างที่ควรรู้ก่อนใช้งาน?
A: ข้อจำกัดหลักของ QuestDB Time Series Data Pipeline ETL คือ learning curve ในช่วงแรก ที่ผู้เริ่มต้นอาจต้องใช้เวลาในการทำความเข้าใจแนวคิดเรื่อง pipeline, time-series data model และการจัดการ resource อย่างเหมาะสม อย่างไรก็ตาม ข้อจำกัดนี้สามารถลดลงได้ด้วยการฝึกฝนและใช้เอกสารอย่างสม่ำเสมอ อีกประเด็นหนึ่งคือในบางกรณีที่ต้องการ performance สูงมาก เช่น การ query ข้อมูลแบบ complex หรือการ join ข้อมูลจำนวนมาก อาจต้อง fine-tune configuration หรือใช้ caching เพิ่มเติม แต่โดยรวมแล้ว QuestDB รองรับ use case ส่วนใหญ่ได้อย่างดี ไม่ว่าจะเป็นการวิเคราะห์ข้อมูลเรียลไทม์ การเก็บข้อมูลจาก IoT หรือการวิเคราะห์ข้อมูลทางการเงิน ดังนั้น ข้อจำกัดเหล่านี้ไม่ใช่ปัญหาใหญ่หากเข้าใจหลักการพื้นฐานและวางแผนการใช้งานอย่างเหมาะสม
แนะนำเพิ่มเติม
🎯 เปิดบัญชี XM Forex → สมัคร
📱 แอป iCafeFX → ดาวน์โหลด
📊 สัญญาณฟรี → รับสัญญาณ
📚 คู่มือเทรด → SiamCafeBook
🤝 สมัคร Partner XM → pipaffiliates.com/c?c=72816&l=th&p=6
ทดลองเทรดฟรี XM — โบรกที่ อ.บอม ใช้เทรดจริง (พาร์ทเนอร์ XM)
แนะนำจากเครือข่าย SiamCafe
คู่มือ Forex ที่เกี่ยวข้อง
แหล่งอ้างอิง
- SiamCafe.net - ชุมชนไอทีไทยตั้งแต่ปี 1997
- iCafeFX.com - ศูนย์วิเคราะห์ Forex และทองคำ