0

私は Redis を初めて使いましたが、現在、統計アプリケーションを改善するのに問題があります。統計を生成するための現在の SQL は次のとおりです。

SELECT MIN(created_at), MAX(created_at) FROM table ORDER BY id DESC limit 10000

MINフィールドからMAX値を返しcreated_atます。

Redisについて読んだことがRANGEありSCORINGますが、この問題を解決するために使用できるようです。SCORINGしかし、最後の10000レコードについてはまだ混乱しています。それらを使用してこの問題を解決できますか、または Redis を使用してこの問題を解決する別の方法はありますか?

よろしく

4

1 に答える 1

0

あなたのターゲットはやや不明確なようです - すべてのレコードを Redis に保存しようとしていますか? その場合、テーブルには他にどのような列があり、tableそれに対して実行する他のクエリは何ですか?

私はあなたの質問を額面どおりに受け止めますが、ほとんどの NoSQL データベース (Redis を含む) では、データを取得する方法に従ってデータを保存する必要があることに注意してください。過去 10,000 レコードの最小/最大作成日を取得したいと仮定すると、それらをソート済みセットに保持することをお勧めします。Sorted Set のメンバーは一意idになり、そのスコアは作成日になります (エポック値を使用)。たとえば、ID 1、2、3 の行は、それぞれ日付 10、100、1000 に作成されます。

ZADD table 10 1 100 2 1000 3 ...

最小限の作成日を取得するのは今では簡単ZRANGE table 0 0 WITHSCORESですZRANGE table -1 -1 WITHSCORES。唯一の「トリッキー」な部分は、Sorted Set が更新されていることを確認することです。そのため、新しいレコードごとに、セットから最小の ID を削除して新しい ID を追加する必要があります。疑似 Python コードでは、これは次のようになります。

def updateMinMaxSortedSet(id, date):
    count = redis.zcount('table')
    if count > 10000:
        redis.zrem('table', id-10000)
    redis.zadd('table', id, date)
于 2015-05-01T20:24:28.760 に答える