เราใช้ InfluxDB (https://www.influxdata.com/products/influxdb-overview/) ในระบบเรา (รันอยู่ใน docker) ในการเก็บข้อมูลประเภท time series data เช่น ราคา, trade action, trade statistics, trade position ฯ

เหตุผล (design rationale) ที่ผมเลือกใช้ InfluxDB:
ข้อเสียมี 2 เรื่อง:
จริงๆ จะใช้ Graphite หรือ RDBMS อย่าง Postgresql แทนก็ได้ครับแต่
====================
เสริมอีกนิด อย่างที่ AVA advisory กับ Finnomena ใช้ Cassandra เป็น database สำหรับเก็บข้อมูลราคา, อินดิเคเตอร์เพราะเขาเก็บข้อมูลหุ้นทุกตัวในตลาดและหลายตลาด และหลายสินค้า ข้อมูลจึงเยอะและใหญ่ และเขาทำในสเกลใหญ่ ข้อมูลหาย/พัง/เสียหาย ก็จะเสี่ยงมาก ดังนั้นหากใช้ Cassandra ข้อมูลจะหาย/พัง/เสียหาย ยากมาก ชัวร์สุดๆ
Cassandra เป็น NoSQL database ประเภท wide-column store ใช้การจัดคอลัมน์เป็นกลุ่มๆ แล้วก๊อปปี้ข้อมูลกระจายไปเก็บในหลายเครื่อง Cassandra ใช้เครื่องเยอะมาก จึงเป็นสาเหตุหลักที่ผมไม่เลือกใช้ในระบบเรา
wide-column store database เป็น database ที่มี high availability สูงที่สุด (แต่ใช้หลายเครื่องมาก)
architecture ในระบบเรา ผมออกแบบในแนว microservices architecture โดยแต่ละชุด trading robot มี database (InfluxDB) กับ cache (Redis) เป็นของมันเอง ซึ่งทั้งหมดรันใน container (docker) บน 1 เครื่อง (VM) แต่ละชุด trading robot จะไม่แชร์อะไรระหว่างกันเลยจึง lightweight & resilient กว่า ไอเดียนี้มาจากแนวคิด embedded resources & decentralization หากเกิดข้อผิดพลาดกระทบกับการรันบอทจะเป็นข้อผิดพลาดในรูปแบบ partial failure ซึ่งจะส่งผลกระทบต่อภาพรวม (บอทในเครื่องต่างๆ ) น้อยมาก หรือแทบไม่เกิดผลกระทบเลย
ในโปรเจ็คต์ Deep Ocean กำลังพิจารณาเลือกใช้ Google BigTable สำหรับเก็บราคาอยู่ครับ ยังไม่ได้ข้อสรุป กำลังทำ feasibility study เทียบระหว่าง BigTable กับ InfluxDB เพราะนอกจากพิจารณาด้านความสามารถ ยังต้องคำนึงด้านใช้จ่ายด้วย ไว้ได้ข้อสรุปจะมาอัพเดตนะครับ
ดูอีกตัวอย่างในเว็บนี้ได้ครับ ที่เอา InfluxDB มาเก็บราคาหุ้น แล้ว visualize ด้วย Grafana https://medium.com/analytics-vidhya/watch-your-stock-shares-with-grafana-and-influxdb-4df7a99c6d64