gpt4 book ai didi

postgresql - 将 Postgres hstore 与 celery 一起使用?

转载 作者:行者123 更新时间:2023-11-29 13:05:32 24 4
gpt4 key购买 nike

是否可以(和/或有效)使用 Postgres 的 hstore 作为 celery 的代理?

我被限制(缺少一些非常有说服力的理由)使用 Postgres 数据库。我有一个带有 celery 任务的 Django 应用程序。目前我正在使用标准数据库支持,但 celery 文档强烈建议不要将这种方法用于非常小的任务队列之外的任何事情。当我遇到一些关于 Postgres 的 hstore 功能的信息,以及它提供与 redis 等效功能的建议时,我正在考虑安装 redis。

不过,我还没有看到任何有关将 hstore 专门用于 celery 的信息,如果它真的可以替代 redis,这似乎很奇怪。查看
处的 celery 后端代码 https://github.com/celery/celery/blob/master/celery/backends/base.py
看起来基本的 celery KeyValueStoreBackend 是一个非常简单的 api:

def get(self, key):
raise NotImplementedError('Must implement the get method.')

def mget(self, keys):
raise NotImplementedError('Does not support get_many')

def set(self, key, value):
raise NotImplementedError('Must implement the set method.')

def delete(self, key):
raise NotImplementedError('Must implement the delete method')

def incr(self, key):
raise NotImplementedError('Does not implement incr')

但在我可能投入大量时间之前,似乎值得问一下是否有什么我遗漏的东西会反对使用 hstore 实现这个 API 并将其用作 celery 后端。

例如。 celery 是否有此 API 未捕获的要求(例如原子性、可伸缩性、负载下的可靠性)?使用 hstore 实现它是否无法对现有数据库后端提供实质性改进?我对 celery 还很陌生,从未使用过 hstore,所以我不确定我忽略了什么(如果有的话)。

最佳答案

hstore 绝对不提供“与 redis 等效的功能”。

hstore 字段不是字段中的键值数据库。尝试以这种方式使用它会导致痛苦和糟糕的表现。必须为每次 更新重写包含hstore 字段的整个 记录。此外,与关系数据库中的任务队列相同的挑战也适用于 hstore,这意味着您最多只能获得单个 worker 的性能,您不会获得并发性,即使它可能表面上看起来像你。

所有 hstore 都是数据库字段中的 HashMap 。它非常有用,但它并不神奇,它不会让您摆脱使用 RDBMS 进行消息队列的潜在挑战。

如果你想要消息队列,就使用消息队列。 PGQ是一个不错的选择。或者检查专用的消息队列工具,如 ZeroMQ。

关于postgresql - 将 Postgres hstore 与 celery 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13871031/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com