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

Redis SortedSetがバランスツリーの代わりにスキップリストを使用するのはなぜですか?

    アンティレスは言った、https://news.ycombinator.com/item?id =1171423

    を参照

    いくつかの理由があります:

    • メモリをあまり消費しません。基本的にはあなた次第です。ノードが特定の数のレベルを持つ確率に関するパラメータを変更すると、btreeよりもメモリ消費量が少なくなります。
    • ソートされたセットは、多くの場合、多くのZRANGEまたはZREVRANGE操作のターゲットになります。つまり、スキップリストをリンクリストとしてトラバースします。この操作では、スキップリストのキャッシュの局所性は、少なくとも他の種類のバランスの取れたツリーと同じくらい良好です。
    • 実装、デバッグなどが簡単です。たとえば、スキップリストの単純さのおかげで、O(log(N))にZRANKを実装する拡張スキップリストを含むパッチ(すでにRedisマスターにあります)を受け取りました。コードにほとんど変更を加える必要はありませんでした。

    Append Onlyの耐久性と速度については、RedisターゲットでIMHOがまれであるというユースケース(すべてのコマンドでfsync())を犠牲にして、Redisを最適化することは良い考えではないと思います。 。とにかくパフォーマンスのヒントが大きいため、ACIDSQLデータベースでもこの機能を使用している人はほとんどいません。

    スレッドについて:私たちの経験によると、RedisはほとんどI/Oバウンドです。私はスレッドを使用して仮想メモリからのものを提供しています。リンクが非常に高速で単一のコアを飽和させることができると仮定して、すべてのコアを活用する長期的なソリューションは、Redisの複数のインスタンス(ロックなし、コアの数に応じてほぼ完全に線形にスケーラブル)を実行し、「Redisクラスター」を使用することです。 「将来開発する予定のソリューション。



    1. RailsアプリでHASHをRedisに保存する

    2. 自動再試行

    3. MongoDB sort()

    4. UbuntuからmongoDBをアンインストールします