sql >> データベース >  >> NoSQL >> Redis

一度に数百のカウンターをインクリメントしますか、redisまたはmongodb?

    キー構造のレイアウトに応じて、zincrコマンドをパイプライン化することをお勧めします。簡単な「コミット」トリガー、つまりリクエストがあります。パラメータを繰り返し処理し、各キーを亜鉛メッキする場合、リクエストの最後に実行コマンドを渡すと、非常に高速になります。私はあなたがcgiとDjangoアプリの両方として説明するようなシステムを実装しました。私はこれに沿ってキー構造を設定しました:

    YYYY-MM-DD:HH:MM->ソートされたセット

    そして、説明したシナリオには十分なはずの単一のプロセスで、redis側で1秒あたり150000〜200000の増分のようなものを処理することができました。このキー構造により、時間枠に基づいてデータを取得できます。また、dbクリーンアッププロセスの記述を回避するために、キーに有効期限を追加しました。次に、前述のキーパターンのバリエーションを使用して、統計を1時間ごと、1日ごと、および1週間ごとに「ロールアップ」するように操作を設定するcronジョブを作成しました。これらのアイデアは、Redisの組み込み機能を利用して、レポート側をシンプルにする方法であるため、ここで取り上げます。他の方法もありますが、このパターンはうまくいくようです。

    eyossiが指摘しているように、グローバルロックは、書き込みと読み取りを同時に行うシステムでは実際の問題になる可能性があります。これをリアルタイムシステムとして作成している場合は、同時実行性が問題になる可能性があります。 「endifday」ログ解析システムの場合、入力時にパーサーまたはレポートの複数のインスタンスを実行しない限り、競合がトリガーされる可能性は低くなります。読み取りを高速に保つことに関してRedisでは、メインインスタンスからスレーブ化された読み取り専用のredisインスタンスを設定することを検討します。レポートを実行しているサーバーにレポートを配置し、レポートプロセスをそのサーバーに向けると、レポートの生成が非常に迅速になります。

    使用可能なメモリ、データセットのサイズ、および他のタイプのデータをredisインスタンスに保存するかどうかに応じて、メモリ使用量を抑えるために32ビットのredisサーバーを実行することを検討できます。 32bインスタンスは、このタイプのデータの多くをメモリの小さなチャンクに保持できるはずですが、通常の64ビットRedisを実行している場合は、メモリをあまり消費しないので、気軽に使用してください。いつものように、独自の使用パターンをテストして検証します



    1. MongoDBで日付から秒を取得する5つの方法

    2. MongoDBの配列から値を削除する3つの方法

    3. nodejsスクリプト内のmongoデータベース内のすべてのコレクションを一覧表示する

    4. _http_server.js:192 throw new RangeError( `Invalid status code:$ {statusCode}`);