我正在运行一个 Flask 服务器,它将数据加载到 MongoDB 数据库中。由于数据量很大,而且这需要很长时间,我想通过后台作业来完成。
我使用 Redis 作为消息代理和 Python-rq 来实现作业队列。所有代码都在 Heroku 上运行。
据我了解,python-rq 使用 pickle 序列化要执行的函数,包括参数,并将其与其他值一起添加到 Redis 哈希值。
由于参数包含要保存到数据库的信息,它非常大(~50MB),当它被序列化并保存到 Redis 时,不仅需要大量时间,而且还消耗大量内存。Heroku 上的 Redis 计划仅 100MB 的费用为每分钟 30 美元。事实上,我经常遇到 OOM 错误,例如:
OOM command not allowed when used memory > 'maxmemory'.
我有两个问题:
- python-rq 是否非常适合这项任务,还是 Celery 的 JSON 序列化更合适?
- 有没有办法不序列化参数而是引用它?
非常感谢您对最佳解决方案的想法!