web-dev-qa-db-ja.com

LeveldbはRedis、Riak、Tokyo Tyrantと比較してどうですか?

Leveldb は、Googleの新しい興味深い永続キー値ストアのようです。 LeveldbはRedis、Riak、Tokyo Tyrantとどのように違いますか?どの特定のユースケースで、一方が他方より優れていますか?

44
rafidude

LeveldbとRedisが指摘する相違点は明らかになっていますが、columの基準には少し同意しません。

並行性が必要ですか? Redisと一緒に行きます。 Redisには、それを処理するためのコードがすでに書かれているためです。よく書かれた他の人のコードを使用して、同時実行性を処理できるときはいつでも、はるかに優れています。私は単にマルチスレッドのアプリを意味するのではなく、これに複数のプロセスの概念を含めます-同じシステム上にあるかどうかにかかわらず。それでも、マルチスレッドアプリでロックを記述してデバッグする必要がないことは、私の目には大きな利点です。

アプリ内で完全に自己完結型にしたいですか?ライブラリなので、leveldbを使用します。 k/v以上のものが必要ですか? Redisを使用します。

RiakやTTでより良いスーツにコメントするのにまだ十分に流だとは思わないので、leveldbまたはRedisの側面についてのみコメントしています。

要するに、探しているのがシングルスレッドアプリの永続的なキーと値のストアだけである場合、leveldbはリストの中から選択するオプションです(別の選択肢は東京のキャビネットまたは良いole BerkleyDB、さらにはsqliteです)。しかし、それ以上必要な場合は、他のいずれかを選択してください。

[編集:説明を更新しました。並行性]

29
The Real Bill

これを追加するのは、前の回答の両方で、この(重要な)区別がなされていないためです...

  • Redis:データベースサーバーです。カスタムバイナリプロトコルを介して(通常はクライアントライブラリを介して)通信します。
  • LevelDB:キーと値のストアを実装するライブラリです。 C++ APIを直接 を呼び出して、それと通信します。

SQLiteに精通しており、クライアントアプリケーション用の組み込みDBとして普及している場合(AndroidとiOSの両方が出荷していると思います)、LevelDBのようなものがどこに収まるかがわかります。

複雑なPIMアプリ、おそらくオフィスの個々のコンピューターにインストールされるエンタープライズアドレス帳マネージャーを作成していることを想像してください。すべてのデータをXMLまたはJSONで保存することは望ましくありません。アプリ内で自分で記述/解析しました-できれば、DBに保存してアクセスパターンを簡単にしたいです。

しかし、Redisのローカルコピーを出荷してインストールする必要もありません。接続するためにランダムポートで実行します。アプリから直接ネイティブに呼び出せるDBが必要です。 「over the wire」通信について心配します。クライアント専用アプリでは必要のないネットワークのようなものを一切使用せずに、DBの生の内臓が必要です。

これはLevelDBが置かれている場所です。

それは、異なる仕事のための異なるツールです。

42
Riyad Kalla

違い:

  • Redisはサーバーですが、Leveldbは「高速で永続的なキーと値のストアを実装するライブラリ」です。そのため、Redisでは、サーバーをポーリングする必要があります。 Leveldbでは、データベースはディスクに保存されるため、メモリに保存されるRedisよりもかなり遅くなります。
  • Leveldbはキー/ストアのみを提供します。 Redisにもこれがありますが、さらに多くの機能と機能があります

類似性:

  • どちらにもキー/ストアメソッドがあります

別のものを選択する理由

C/C++アプリを作成している場合は、mysqlほどのリソースを必要としないデータベースが必要であれば、leveldbが最適です。 Leveldbはコードレベルのアクセスを提供しますが、redisではサーバーと通信するためのインターフェイスが必要です。他のアプリでは、Redisが最適です。複数のアプリケーションがアクセスできる実際のサーバーを取得するだけでなく、ディスクへの書き込み、セット、リスト、ハッシュなどの他の機能も取得します。

11
Colum