ຮູ້ຈັກ ແລະ ໃຊ້ງານ InfluxDB time series database
ສະບາຍດີທຸກຄົນກັບມາພົບກັນອີກຄັ້ງກັບບົດຄວາມໃຫມ່ ທີ່ບໍ່ໄດ້ຂຽນດົນນານຫຼາຍເດືອນ ເກືອບລືມຫຼັງກັນເລີຍ ມືນີ້ຈະພາຜູ້ອ່ານມາຮູ້ຈັກັບ
InfluxDB
ແລະtime-series database
ວ່າມີຮູບແບບ ແລະ ການເກັບຂໍ້ມູນແນວໃດ ຕະຫຼອດຈົນເຖິງການໃຊ້ງານ ວ່າເຮົາຈະນຳເອົາInfluxDB
ໄປໃຊ້ກັບວຽກງານການພັດທະນາແນວໃດ ວ່າແລ້ວກໍ່ໄປເລີ່ມກັນເລີຍ!
Time series data
ສຳລັບ developer ຫຼາຍຄົນກໍ່ເຄີຍຫຼິ້ນກັບຂໍ້ມູນມາຫຼາຍປະເພດ ບໍ່ວ່າຈະເປັນປະເພດ ຂໍ້ຄວາມ, ຕົວເລກ, ຮູບ, ສຽງ ທີ່ເກັບໄວ້ຢູ່ໃນ Database ຫຼື File ທຳມະດາ ແຕ່ມັນຍັງມີຂໍ້ມູນອີກປະເພດທີ່ເກັບໄປຕາມເວລາ ຫຼືກໍ່ຄື ທຸກຂໍ້ມູນທີ່ເກັບລົງໄປຈະມີເວລາກຳກັບໄວ້ວ່າເປັນຂໍ້ມູນທີ່ເກີດຂຶ້ນນະຊ່ວງເວລາໃດ ເຊິງໄລຍະເວລາກໍ່ຈະຢູ່ໃນຫຼັກ second
, millisecond
, nanosecond
ຫຼື ກໍ່ຄືຂໍ້ມູນທີ່ປ່ຽນແປງຕະຫຼອດເວລາ ຫຼື ແບບ real-time data ຕົວຢ່າງເຊັ່ນ: ຂໍ້ມູນຈາກ sensor ວັດສະພາບອາກາດ, Dow Jones Industrial, ລະດັບນໍ້າໃນເຂື່ອນໄຟຟ້າ, cpu
, disk
… etc ເຊິ່ງເອີ້ນຂໍ້ມູນນີ້ວ່າ Time series data
ຂໍ້ມູນທີ່ບໍ່ແມ່ນ Time series
ຄື ຂໍ້ມູນປະຊາກອນ, ຂໍ້ມູນລົດໃນ parking ເປັນຕົ້ນ ເຊິ່ງເປັນຂໍ້ມູນທີ່ບໍ່ປ່ຽນແປງຕະຫຼອດເວລາ.
InfluxDB
ໃນການເກັບຂໍ້ມູນທີ່ມີການປ່ຽນແປງຕະຫຼອດເວລານັ້ນ ການທີ່ຈະໃຊ້ database ແບບທົ່ວໄປເຊັ່ນ Mysql
, SQL Server
ເກັບຂໍ້ມູນທີ່ 1000 record / 1 mn
ແລະ ຮູບແບບຂໍ້ມູນກໍ່ອາດແຕກຕ່າງກັນໄປຕາມເວລາ. ໃນທາງປະສິດທິພາບ ແລະ ການຄົ້ນຫາຂໍ້ມູນທີ່ Big Data
ຂະໜາດນັ້ນຄົງບໍ່ໄຫວ ເພາະ Database ເຫຼົ່ານັ້ນບໍ່ໄດ້ອອກແບບໃຫ້ຮ້ອງຮັບກັບຂໍ້ມູນແບບ Time series
ດັ່ງນັ້ນຈຶ່ງເກີດມີ InfluxDB Database
ທີ່ອອກແບບສະເພາະເກັບຂໍ້ມູນທີ່ເປັນ Time series
ໂດຍສະເພາະ. ເຊິງເຮັດໃຫ້ເຮົາຄົ້ນຫາຂໍ້ມູນທີ່ມະຫາສານໄດ້ແບບ Real-Time
ກັນເລີຍ!.
Install InfluxDB ດ້ວຍ Docker
ການຕິດຕັ້ງ InfluxDB ໂດຍໃຊ້ Docker ກໍ່ແສນງ່າຍດາຍ ໂດຍໄປທ ີ່ InfluxDB Docker Official Images
ເຊິ່ງ Documents ກໍ່ຂຽນວິທີການຕິດຕັ້ງ ແລະ ຕັ້ງຄ່າໃຫ້ຄົບຖວນໃນລະດັບ Development ແລະ Production ແລ້ວ! ແຕ່ສຳລັບບົດຄວາມນີ້ຈະຕິດຕັ້ງໃນສະພາບແວດລ້ອມທົດສອບການໃຊ້ງານເທົ່ານັ້ນ ສຳລັບການຕິດຕັ້ງໃນລະດັບ Production ກໍ່ສາມາດຫາສຶກສາເບິ່ງ Options ຕ່າງໆໄດ້ ບໍ່ໄດ້
ຫຍຸງຍາກຫຍັງເລີຍ.
$ docker run --name influxdb -d --network mynet -p 8086:8086 \
-v influxdb:/var/lib/influxdb \
influxdb
ເທົ່ານີ້ເຮົາກໍ່ສາມາດໃຊ້ງານ InfluxDB
ໄດ້ແລ້ວ ຈະງ່າຍໄປໃສ່!!!!
ໃນການເຊື່ອມຕໍ່ຫາ influxdb server ນັ້ນສາມາດໃຊ້ influx cli
ຫຼື ຜ່ານ REST Api
ທີ່ເຮັດວຽກຢູ່ port 8086
ໂດຍ default ນອກນີ້ client ຍັງ Support ພາສາ program ຫຼາກຫຼາຍພາສາ ສາມາດເລືອກໃຊ້ຕາມຄວາມສະດວກໄດ້ເລີຍ ແຕ່ບົດຄວາມນີ້ຈະໃຊ້ influx cli
ເພື່ອຄວາມງ່າຍໃນການທົດສອບການໃຊ້ງານ
$ docker exec -it influxdb influx Connected to http://localhost:8086 version 1.7.10
InfluxDB shell version: 1.7.10
>
ເທົ່ານີ້ເຮົາກໍ່ສາມາດເຊື່ອຕໍ່ກັບ InfluxDB Server
ໄດ້ແລ້ວ
Metrics ຂອງ InfluxDB
InfluxDB
ເກັບຂໍ້ມູນເປັນ Collection
ຂອງ Metrics
. Metrics
ເປັນຊຸດຂໍ້ມູນທີ່ເປັນຕົວວັດປະສິດທິພາບ, ຄຸນລັກສະນະ, ຄວາມໜ້າຈະເປັນ ຂອງ System, product ເວົ້າງ່າຍໆ ມັນກໍ່ຄືຂໍ້ມູນທີ່ເປັນ feature ຂອງສິ່ງທີ່ເຮົາກຳລັງສຶກສາ ຫຼື ຈະວັດແທກມັນໃນເຊິງປະລິມານ(ງ່າຍບ່ອນໃດຫວ່ະ!) . ສຳລັບຮູບແບບຂໍ້ມູນ metrics ຂອງ influxdb
ນັ້ນຈະປະກອບດ້ວຍ:
Measurement
ເປັນ Container ທີ່ໃຊ້ເກັບບັນດາອົງປະກອບຕ່າງໆຂອງຂໍ້ມູນ ເຊັ່ນ time
, filed
, value
… ເປັນຕົ້ນ ເວົ້າກັນງ່າຍໆ ມັນກໍ່ຄື Table ດີໆນີ້ເອງ
Tag
ເປັນ key-value
ທີ່ເປັນໂຄງສ້າງທີ່ໃຊ້ເກັບ metadata ເຊິ່ງເປັນ optional ນັ້ນໝາຍຄວາມວ່າ ບໍ່ກຳນົດ ຫຼື ກຳນົດກໍ່ໄດ້ ແຕ່ແນະນຳໃຫ້ກຳນົດເພາະ Tag
ຈະເປັນ indexesຂອງຊຸດຂໍ້ມູນ. Tag
ຈະປະກອບດ້ວຍ Tag Key
ແລະ Tag Value
Field
ເປັນ key-value
ທີ່ໃຊ້ເກັບຂໍ້ມູນຕົວຈິງຂອງ metrics
ເຊິ່ງ Field
ຄ້າຍຄື Tag
ຕ່າງແຕ່ວ່າ Field
ບໍ່ແມ່ນ indexes ຂອງຊຸດຂໍ້ມູນ Field
ຈະປະກອບດ້ວຍ Field key
ແລະ Field value
Timestamp
ເປັນວັນເວລາໃນຮູບແບບ RFC3339 UTC
ເຊິ່ງເປັນສິ່ງທີ່ຂາດບໍ່ໄດ້
ອົງປະກອບຫຼັກໆກໍ່ຈະປະມານນີ້ ທີ່ເຮົາຈະໄດ້ໃຊ້ກັນທີ່ເຫຼືອນັ້ນກໍ່ເປັນພຽງການຈັດກຸມຂອງບັນດາອົງປະກອບທີ່ໄດ້ເວົ້າມາເຊົ່ນ: Tag set
, Field set
, Series
…etc.
InfluxDB line protocol
ໃນການເອົາຂໍ້ມູນ metrics
ເກັບຢູ່ InfluxDB
ນັ້ນ ຈະຕ້ອງແປງເປັນຮູບແບບສະເພາະຂອງ InfluxDB
ເຊິ່ງເອີ້ນວ່າ: “InfluxDB line protocol”
Syntax
<measurement>[,<tag_key>=<tag_value>[,<tag_key>=<tag_value>]] <field_key>=<field_value>[,<field_key>=<field_value>] [<timestamp>]
ຕົວຢ່າງ
weather,location=us-midwest temperature=82 1465839830100400200
| -------------------- -------------- |
| | | |
| | | |
+-----------+--------+-+---------+-+---------+
|measurement|,tag_set| |field_set| |timestamp|
+-----------+--------+-+---------+-+---------+
ແລະນີ້ຄືວິທີການ Insert ຂໍ້ມູນຂອງ InfluxDB
ເບິ່ງກັນງ່າຍໆກໍ່ຄືຂໍ້ພຽງແຕ່ແປງຮູບແບບມາເປັນ line ແບບຂ້າງເທິງແລ້ວຈັບໂຢນເຂົ້າໄປ InfluxDB
ໄດ້ເລີຍ ບໍ່ມີຫຍັງງ່າຍໄປກວ່ານີ້ແລ້ວ!
Influx Query Language (InfluxQL)
InfluxQL
ຄາຍຄື SQL Language
ເລີຍ. ໃຜທີ່ເຄີຍໃຊ້ Mysql
, SQL Server
ຫຼືບັນດາ Database
ທີ່ໃຊ້ SQL Language
ກໍ່ສາມາດໃຊ້ງານ InFluxQL
ໄດ້ເລີຍ ບໍ່ຈຳເປັນຕ້ອງໄປສຶກສາ Syntax ຫຍັງໃຫມ່ໃຫ້ຫຍຸງຍາກຫຼາຍ. ເຮັດໃຫ້ສະດວກ ແລະ ເລີ່ມຕົ້ນໄດ້ໄວ. ເຊິ່ງນີ້ຄືຂໍ້ດີອີກຢ່າງໜຶ່ງຂອງ InfluxDB
.
ຕົວຢ່າງການໃຊ້ງານ InfluxQL
CREATE database
$> CREATE DATABASE mydb /*ສ້າງ database mydb*/
$> SHOW DATABASES /*ສະແດງລາຍການ databases ທັງໝົດໃນ influxDB*/
name: databases
name
----
_internal
mydb
...
$> USE mysb /*ໃຊ້ງານ mydb*/
$> show MEASUREMENTS /* ສະແດງລາຍການ MEASUREMENTS ທັງໝົດທີ່ຢູ່ໃນ database mydb*/name: measurements
name
----
car
INSERT Metrics
$> INSERT my_account,location=laos nName="xang",lname="phiasakha" /*insert metrics ຂອງ database mydb ດ້ວຍ InfluxDB line protocol*/$> show MEASUREMENTS
name: measurements
name
----
car
my_account
SELECT
$> SELECT * from my_account /*query ຂໍ້ມູນຂອງ my_account*/
name: my_account
time lname location nName
---- ----- -------- -----
1583136608510039600 phiasakha laos xang
1583136623976676000 test china abc
1583136632922471800 test china zang$> SELECT * from my_account WHERE nName='xang'
name: my_account
time lname location nName
---- ----- -------- -----
1583136608510039600 phiasakha laos xang$> SELECT * from my_account LIMIT 2
name: my_account
time lname location nName
---- ----- -------- -----
1583136608510039600 phiasakha laos xang
1583136623976676000 test china abc
ສຳລັບຕົວຢ່າງ ແລະ ຮູບແບບການໃຊ້ງານຫຼາຍກວ່ານີ້ສາມາດສຶກສາເພີ່ມຕື່ມໄດ້ທີ່ InfluxQL Documents
ມາຮອດຈຸດນີ້ ຂໍ້ຈົບບົດຄວາມນີ້ໄວ້ເທົ່ານີ້ກ່ອນ ຫວັງວ່ຜູ້ທີ່ເຂົ້າມາອ່ານຈະພໍເຫັນພາບການໃຊ້ງານ InfluxDB ເພື່ອຕໍ່ຍອດສຶກສາໃນຂັ້ນຕໍ່ໄປ. ແລ້ວພົບກັນໃນບົດຄວາມໜ້າ. ຂອບໃຈທຸກຄົນ!