在写入数据库之前持久存储数据点

Store datapoints persistently before writing to database

我有一个接收传感器数据的 Django 应用程序。然后使用 influxdb-client-python 库处理此数据并写入 influxDB。我想以异步方式写入数据,因此 return 在数据实际写入数据库之前对数据生产者做出响应。

但是,一旦我发送了这个回复,我就不能再丢失这些数据了。由于我永远无法确定服务器实际上是否能够将数据写入 influxDB,我正在考虑先将其写入文件并在成功后 returning 响应(类似到 WAL)。这引入了新的问题,比如确保 WAL 实际上写入文件,最重要的是,确保它是线程安全的,因为服务器可能同时处理多个请求。

有没有更好的方法,也许内置在 Django 中?

这听起来像队列、后台任务等。你是对的,它只是取代了问题,但队列也非常可靠。

使用 Django and/or Rest Framework 执行此操作的标准库是:

  • Celery - 全功能、成熟、可插入的队列后端
  • Django RQ - 更简单,仅使用 redis

Celery 可能是这里的正确起点,因为它允许您使用“真正的”队列后端,但如果没有大量负载,Django RQ+redis 也可以工作。

在不了解您的应用程序或架构的情况下,很难多说。有很多排队系统(Rabbit, ZeroMQ、AWS SQS、Google 等)。您还可以研究使用例如 AWS SQS 和 AWS Lambda 函数(或 google 版本)构建队列+处理器。