使用Postgres hstore和芹菜?

时间:2012-12-14 00:40:42

标签: postgresql celery django-celery hstore

使用Postgres的hstore作为芹菜的经纪人是否可能(和/或是否有效)?

我受限制(没有一些非常令人信服的理由)使用Postgres数据库。我有一个带芹菜任务的django应用程序。目前我正在使用标准数据库支持,但芹菜文档强烈建议不要使用非常小的任务队列。当我遇到有关Postgres的hstore功能的一些信息时,我正在考虑安装redis,并建议它提供与redis相同的功能。

我还没有看到任何关于使用专门用于芹菜的hstore的事情,如果真的可以替代redis,这似乎很奇怪。透过芹菜后端代码查看 https://github.com/celery/celery/blob/master/celery/backends/base.py
它看起来像基本芹菜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并将其用作芹菜后端的内容。

例如。芹菜是否具有此API未捕获的要求(例如,原子性,可扩展性,负载下的可靠性)?使用hstore实现这一点是否会对现有的数据库后端提供实质性的改进?我对芹菜很新,从不使用hstore,所以我不确定我会忽略什么(如果有的话)。

1 个答案:

答案 0 :(得分:2)

hstore绝对不提供“与redis相同的功能”。

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

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

如果需要消息队列,请使用消息队列。 PGQ是一个不错的选择。另请查看ZeroMQ等专用消息队列工具。

相关问题