前面我們實作了 Publish & Subscribe 收發資料,有了資料之後接下來就是要將它們儲存下來,我們常聽到的通常是關連式資料庫(Mysql),但是我們現在應用在物聯網的架構下,所以希望應用的是時序資料庫 Time Series Datebase - influxdb是一個開源分散式時序、事件和指標資料庫。
InfluxDB 三大特性:
InfluxDB名詞:
InfluxDB名詞 | 一般資料庫的概念 |
---|---|
database | 資料庫 |
measurement | 資料庫中的表,就是table |
points | 表裡面的一行數據,就是 row |
Point屬性 | 一般資料庫的概念 |
---|---|
time | 每個數據記錄的時間,是資料庫自動生成的主索引 |
tags | 各種有索引的屬性 |
field | 各種記錄的值、數據資料 |
開啟EC2後在終端機執行
curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add -
echo "deb https://repos.influxdata.com/ubuntu trusty stable" | sudo tee /etc/apt/sources.list.d/influxdb.list
sudo apt update
sudo apt-get install influxdb
sudo systemctl enable influxdb
sudo systemctl start influxdb
sudo service influxdb start
influx
# 查看所有 DB
> show databases
# 創建 testdb DB
> create database testdb
# 刪除 testdb DB
> drop database testdb
# 進入使用 testdb DB
> use testdb
# 查看所有 measurement
> show measurements
# 刪除 testdb 這個 measurement (也就是刪除testdb表)
> drop measurement testdb
# 查看 testdb 這個 measurement 所有內容
> select * from testdb
exit
pip install influxdb
from influxdb import InfluxDBClient
client = InfluxDBClient('host', 8086, 'your_username', 'yuor_password', 'your_dbname')
print client.get_list_database()
client.create_database('testdb')
client.drop_database('testdb')
from influxdb import InfluxDBClient
# 連線設定
# 初始化地端程式
client = InfluxDBClient('54.xx.xx.xx', 8086, 'root', '', '')
# 顯示目前有哪些資料庫
print(client.get_list_database())
# 創建資料庫
client.create_database('testdb')
# 顯示目前有哪些資料庫
print(client.get_list_database())
# 刪除資料庫
client.drop_database('testdb')
# 顯示目前有哪些資料庫
print(client.get_list_database())
結果:
# 一開始為空
[{'name': '_internal'}
# 新增 testdb
[{'name': '_internal'}, {'name': 'testdb'}]
# 刪除 testdb
[{'name': '_internal'}
client.query('show measurements')
# 資料 (不用寫時間,InfluxDB會自動生成時間戳記)
data = [
{
"measurement": "Temperature",
"tags": {
"topic": "Sensor/Temperature"
},
"fields": {
"tem": 25
}
}
]
# 寫入數據,同時創建表
client.write_points(data)
client.query('drop measurement Temperature')
client.query('select * from Temperature')
from influxdb import InfluxDBClient
# 連線設定
# 初始化(指定要操作的資料庫)
client = InfluxDBClient('54.xx.xx.xx', 8086, 'root', '', 'testdb')
# 資料 (不用寫時間,InfluxDB會自動生成時間戳記)
data = [
{
"measurement": "Temperature",
"tags": {
"topic": "Sensor/Temperature"
},
"fields": {
"tem": 25
}
}
]
# 寫入數據,同時創建表
client.write_points(data)
# 查詢 Temperature 表內容資料
result = client.query('select * from Temperature')
print(list(result.get_points()))
# 刪除 measurement => Temperature
client.query('delete from Temperature')
# 查詢 Temperature 表內容資料
result = client.query('select * from Temperature')
print(list(result.get_points()))
結果:
# data 寫入的資料
[{'time': '2019-10-14T05:07:32.639472146Z', 'tem': 25, 'topic': 'Sensor/Temperature'}]
# 刪除表格後資料就空了
[]
在終端機用 influx 指令查看
明天就是鐵人賽的最後一天囉!
明天會把前面實作 Publish 之後 Subscribe 收到的資料上傳到今天介紹的 influxDB 上,以及利用python 把資料畫成圖表,最後會對於這30天的鐵人賽做整理與回顧,做個最後的summary總結。
即將完成鐵人啦!!!
https://kknews.cc/code/k9baner.html