web-dev-qa-db-ja.com

Redisの代わりに埋め込み可能なJava)はありますか?

このスレッドによると 、JavaからRedisを使用したい場合は、Jedisを使用するのが最適です。

ただし、Redisにすでに存在するものと同様に効率的なセット操作を提供するライブラリ/パッケージがあるかどうか疑問に思いましたが、個別にセットアップする必要なしにJavaアプリケーションに直接埋め込むことができますサーバー(つまり、WebサーバーにJettyを使用)。

より正確に言うと、次のことを効率的に実行できるようにしたいと思います。

  1. Mユーザーの大規模なセットがあります(Mは事前に不明です)。
  2. Nアイテムの大セットがあります。
  3. ユーザーがアイテムを一度に1ユーザー/アイテムずつ調べて、(通常のデータベースに)保存された結果を生成するようにします。
  4. ユーザーが到着するたびに、ユーザーがこれまでに見たことのない既存の結果の数が最も少ないアイテムをそのユーザーに割り当てたいと考えています。これにより、すべてのアイテムをほぼ同じ回数だけ見られるようにするだけで、到着したすべてのユーザーにアイテムのおおよそのラウンドロビン割り当てが生成されます。

上記は並列化された方法で発生します。 MとNが大きい場合、RedisはSQLクエリよりもはるかに効率的に上記を実行します。 Redisサーバーを起動するよりも少し軽量な埋め込み可能なJavaライブラリを使用してこれを行う方法はありますか?

これに大まかに近似するJavaの同時実行ライブラリを使用してコードの山を書くことは可能であると認識しています(そしてある程度、私はそれを行いました)が、それは私がここで探しているものではありません。

26
Andrew Mao

project voldemort をご覧ください。 Linked-Inによって作成された分散型Key-Valueストアであり、埋め込み機能をサポートしています。

クイックスタートガイドには、組み込みサーバーとスタンドアロンサーバーの実行の小さな例があります。

VoldemortConfig config = VoldemortConfig.loadFromEnvironmentVariable();
VoldemortServer server = new VoldemortServer(config);
server.start();

Redisについてよく知らないので、機能ごとに比較することはできません。 Voldemortを使用したプロジェクトでは、読み取り専用のバッキングストアを使用して素晴らしい結果を出しました。これにより、処理データセンターで隔日データベースを「プリコンパイル」し、Edgeデータセンターに「出荷」することができました。このようにして、各エッジデータセンターはそのデータセットのローカルコピーを持っていました。

編集:あなたの質問を読み直した後、私は追加したいと思いました Gauva's Table -このTable DataStructureもあなたが探しているものであり、多くの非SQLデータベースで得られるものと似ています。

11
eSniff

Hazelcast は、Redisのサービスの純粋なJava代替手段として使用できる分散データ構造の実装を多数提供します。その後、すべてを含む単一の「jar」を出荷できます。アプリケーションを実行するために必要な依存関係。独自のアプリケーションのRedisと比較してわずかに異なるプリミティブを調整する必要がある場合があります。

この分野の商用ソリューションには、 TeracottaのEnterprise Ehcache および Oracle Coherence が含まれます。

4
Pavel

まったく同じものが必要だったので、lmdb(Lightning Memory Database)を見てください。 dropwizardアプリケーションをコンテナーにデプロイしましたが、redisまたは別の外部依存関係を追加するのは面倒です。これはうまく機能しているようで、良い活動があります。 fyi、しかし、私はまだこれを本番環境で使用していません。

https://github.com/lmdbjava/lmdbjava

0
Andrew Schwäbe