2017-10-28 24 views
1

私は解決する必要がある興味深い問題があります。私はPostgresにテーブルAを持っています。このテーブルは、一連のタスクを持つキューのように扱われます。 IDはPostgresのインクリメンタルIDです。PostgresテーブルのIDを持つカスタムAWSクラウドウォッチメトリックを作成します

私は現在の処理位置(ID)と最大ID数を含むメトリックを取得したいと考えています。これら2つの数字は毎秒累積しています。

効率的な方法はありますか?

私の頭の上の最も簡単な方法は、このSQLクエリごとに10秒(異なります)を実行することです:テーブルから

選択blablahを、次に最小のIDを取得し、使用するASC

で1つの順序を制限最大のIDを取得する同じアプローチ。

しかし、このコマンドは高価です。これを行うための良い方法はありますか?

+0

この代わりに、RDSのためSQSを使用しない任意の理由は? – user184994

+0

キューからのタスクの読み取り、2つのテーブル(ビジネス関係)の更新、およびそのタスクの削除が1つのトランザクションに含まれます。したがって、ACIDを利用して3つのテーブルを使用します。 –

+0

Dynamoとそのトランザクションライブラリを使用してこの設計を改善することができます。これまでにDynamoトランザクションライブラリを使用している人はいません。 –

答えて

1

新しいレコードをテーブルに挿入するときは、レコードIDを返します。レコードを抽出するときも同じことをします。これをメモリ、ファイル、別のDBテーブルなどにキャッシュすることができます。次に、これらの値をカスタムメトリックとしてCloudWatchに送信するスケジュールされたタスクを実行します。

例新しいレコードを挿入するときにIDを返すために(非常に単純な)SQL文:

INSERT INTO table (name) OUTPUT Inserted.ID VALUES('bob'); 
関連する問題