Я ожидаю данные от комбинированного датчика со скоростью 200/с. Запись состоит из данных ускорения (a.X, a.Y) и данных GPS (широта, долгота). Кроме того, есть данные от двух датчиков силы, каждый из которых дает данные от двух компонентов силы (Fle, Fri).
Я устанавливаю временную метку записей при записи в InfluxDB, потому что не уверен, что задержка данных всегда постоянен. В целях тестирования я установил время начала на 24 часа в прошлом и увеличил метку времени для каждой записи на 5 миллисекунд. Это означает, что я записываю 12 280 000 записей в только что объявленную корзину. Это занимает много времени, но быстрее, чем в реальном времени (это означает, что я пишу более 200 записей/с). Код Python показан ниже:
Код: Выделить всё
import influxdb_client, os, time
from influxdb_client import InfluxDBClient, Point, WritePrecision
from influxdb_client.client.write_api import SYNCHRONOUS
token = os.environ.get("INFLUXDB_TOKEN")
org = "Institute"
url = "http://localhost:8086"
bucket="Institute-Bucket"
write_client = influxdb_client.InfluxDBClient(url=url, token=token, org=org)
write_api = write_client.write_api(write_options=SYNCHRONOUS)
# Starttime -24h in ms
timestamp = int(datetime.now().timestamp() - 86400)*1000
# (60*60*24) seconds * 200/s => 17280000
for value in range(17280000):
Fle1 = int(350+700*math.sin(math.radians(value)))
Fri1 = int(350+700*math.cos(math.radians(value)))
Fle2 = int(300+700*math.sin(math.radians(value)))
Fri2 = int(300+700*math.cos(math.radians(value)))
ts = timestamp + 5*value
points = [Point("measurement5").tag("SensorTyp", "Vehicle").tag("SensorID", "1000").field("a.X", random.randint(-9, 9)).field("a.Y", random.randint(-9, 9)).field("Lat", 52.465827).field("Lon", 13.504945).time(ts, WritePrecision.MS),
Point("measurement5").tag("SensorTyp", "Force").tag("SensorID", "2010").field("Fle", Fli1).field("Fri", Fri1).time(ts, WritePrecision.MS),
Point("measurement5").tag("SensorTyp", "Force").tag("SensorID", "2011").field("Fle", Fle2).field("Fri", Fri2).time(ts, WritePrecision.MS) ]
write_api.write(bucket=bucket, org=org, record= points)
if value % 100 == 0:
time.sleep(0.01) # separate points by 0.01 second
print ("value " + str(value))
Код: Выделить всё
query_api = write_client.query_api()
query = """from(bucket: "Institute-Bucket")
|> range(start: 2024-11-27T23:30:00Z, stop: 2024-11-27T23:33:00Z)
|> filter(fn: (r) => r._measurement == "measurement5")
|> filter(fn: (r) => r.SensorID == "2011")"""
vorher = datetime.now()
tables = query_api.query(query, org="Institut FES")
nachher = datetime.now()
print (nachher - vorher)
for table in tables:
for record in table.records:
print(record.get_time(), record.get_field(), record.get_value())
Но этот запрос требует InfluxDB 27:
Код: Выделить всё
>>> print (nachher - vorher)
0:00:27.654377
Я не ожидал, что это будет так медленно. Поэтому я предполагаю, что мой слишком наивный подход не использует все возможности InfluxDB.
Мне бы хотелось, чтобы время запроса было меньше секунды. Как мне этого добиться?
Подробнее здесь: https://stackoverflow.com/questions/792 ... 00-records
Мобильная версия