2012-01-21 1 views
0

ユーザーデータ用のキャッシュソリューションを構築しています。データは現在sybaseに格納されており、5〜6個の表に分散されていますが、hibernateを使用してその上にクエリー・サービスが構築されており、パフォーマンスは非常に低下しています。キャッシュにデータをロードするためには、10〜15時間の範囲が必要です。多数の列と行(50列、5mm行)のデータベーステーブルのクエリパフォーマンスの向上

したがって、別のリレーショナルデータベース(UDB)に50〜60列と5mm行の非正規化テーブルを作成し、そのテーブルをまず取り込み、JDBCを使用して新しい非正規化テーブルからキャッシュを移入することにしました。私たちのキャッシュは低いです。これにより、パフォーマンスが大幅に向上し、1時間ほどでキャッシュを構築できるようになりましたが、これは5分でキャッシュを構築するという当社の要件を満たしていません。 denormlizedテーブルは、次のクエリを使用してクエリされます。

select * from users where user id in (...) 

ここで、ユーザIDはプライマリキーです。また、クエリを試しました

select * from user where user_location in (...) 

また、ユニークでないインデックスを場所に作成しましたが、それも役に立ちませんでした。

クエリを高速化できる方法があります。もしそうでなければ私たちはいくつかのNOSQL解決策を検討するために開いています。

私たちのニーズに適したNOSQLソリューションはどれですか?大きなテーブルとは別に、毎日テーブル上で約1mmの更新を行います。

私はmongo dbについて読んだことがあるかもしれませんが、誰も非常に多くの行と非常に多くの毎日の更新とmongo dbの経験を投稿していると思われる。

ご意見をお聞かせください。

+0

私には、基本的な問題があるようですが、今は多くの追加テクノロジスタックでそれを強制終了しようとしています。最初にキャッシュ内のすべてのデータが必要なのはなぜですか?そのデータに対してどのような操作を実行していますか?あなたが提供する情報が有資格の回答には十分であるかどうかは疑問です... –

+0

起動時にこのデータを読み込み、新しいユーザーアカウントが作成されたり、データやアカウントが変更されたりすると定期的にデータを更新します削除されました – user1162439

+0

一度にすべてのデータ??なぜあなたはメモリ内のデータを必要としますか?現代のデータベースは、ディスク上のデータにアクセスすることで非常に効率的です...私はあなたが何をしようとしているのか分からない –

答えて

4

ここで、MongoDBに関する簡単な答えは、はいです。これは、RDBMSの前に非正規化キャッシュを作成するためにこの方法で使用できます。他の人はMongoDBを使用して、あなたが記述したものと同じ(そしてより大きい)サイズのデータ​​セットを格納し、そのサイズのデータ​​セットをRAMに保持することができます。そこにあなたのデータの面で、ここで欠落しているいくつかの詳細がありますが、それはMongoDBのの能力を超えて、確かではない、より頻繁に使用される実装の1つである:キーは、作業のサイズになります

http://www.mongodb.org/display/DOCS/The+Database+and+Caching

データセット、したがって使用可能なRAM(MongoDBはデータをメモリにマップします)。大規模なソリューション、重いスケーリングの作成、および同様の問題には、採用可能な多数のアプローチ(シャーディング、レプリカセット)があります。

MongoDBがすべての要件を満たしているとは言い難いですが、他の人が既に同様の実装を行っており、指定された情報に基づいているとすれば、どちらも動作しません。

関連する問題