0

ユーザーデータのキャッシュソリューションを構築しています。データは現在sybaseに保存されており、5〜6個のテーブルに分散されていますが、クエリサービスは休止状態を使用してその上に構築されており、パフォーマンスが非常に低下しています。データをキャッシュにロードするには、10〜15時間の範囲でかかります。

そこで、50〜60列と5mm行の非正規化テーブルを別のリレーショナルデータベース(UDB)に作成し、最初にそのテーブルにデータを入力してから、JDBCを使用して新しい非正規化テーブルからキャッシュにデータを入力することにしました。これにより、キャッシュを構築する時間が短縮されます。 。これにより、パフォーマンスが大幅に向上し、約1時間でキャッシュを構築できるようになりましたが、5分以内にキャッシュを構築するという要件も満たしていません。非正規化されたテーブルは、次のクエリを使用してクエリされます

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

ここで、ユーザーIDが主キーです。クエリも試しました

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

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

それで、クエリをより速くすることができる方法があります。そうでない場合は、いくつかのNOSQLソリューションを検討することもできます。

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

私はmongodbについて読んだことがあり、それは機能する可能性があるようですが、これほど多くの行と多くの毎日の更新があるmongodbの経験を投稿した人は誰もいません。

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

4

1 に答える 1

4

ここで、MongoDB に関する簡単な答えは「はい」です。このように使用して、RDBMS の前に非正規化キャッシュを作成できます。他の人は、MongoDB を使用して、説明したものと同様の (およびより大きな) サイズのデータ​​セットを格納し、そのサイズのデータ​​セットを RAM に保持できます。ここにはデータに関していくつかの詳細が欠けていますが、MongoDB の機能を超えているわけではなく、より頻繁に使用される実装の 1 つです。

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

重要なのは作業データセットのサイズであり、したがって使用可能な RAM (MongoDB はデータをメモリにマップします) です。大規模なソリューション、書き込み負荷の高いスケーリング、および同様の問題については、採用できるさまざまなアプローチ (シャーディング、レプリカ セット) があります。

与えられた詳細レベルでは、MongoDB がすべての要件を満たしていると断言することは困難ですが、他の人がすでに同様の実装を行っており、与えられた情報に基づいていることを考えると、MongoDB が機能しない理由もありません。

于 2012-01-23T17:01:09.710 に答える