1

Postgres の hstore をセロリのブローカーとして使用することは可能ですか (および/または効果的でしょうか)?

私はPostgres dbの使用に制限されています(非常に説得力のある理由がないため)。セロリタスクを備えた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 を使用したことがないので、何を見落としているのか (もしあれば) わかりません。

4

1 に答える 1

2

hstore「redisと同等の機能」を絶対に提供しません。

hstoreフィールドは、フィールド内のKey-Value-DBではありません。そのように使用しようとすると、痛みとひどいパフォーマンスにつながります。フィールドを含むレコード全体は、更新のたびに書き直す必要があります。さらに、リレーショナルDBのタスクキューに適用されるのと同じ課題が適用されます。つまり、単一のワーカーのパフォーマンスが最高に得られ、表面的には同じように見えても、同時実行性は得られません。hstorehstore

すべてhstoreはデータベースフィールドのハッシュマップです。これは非常に便利ですが、魔法ではありません。また、メッセージキューにRDBMSを使用するという根本的な課題から解放されることもありません。

メッセージキューが必要な場合は、メッセージキューを使用します。PGQは1つの良いオプションです。または、ZeroMQなどの専用のメッセージキューツールを確認してください。

于 2012-12-14T00:54:53.873 に答える