0

Java ドライバーから mongo クラスターでワイルドカード/正規表現ベースのクエリを実行しようとしています。Mongo レプリカ セットの構成: 3 メンバーのレプリカ 16 CPU (ハイパースレッド)、24G RAM Linux x86_64 コレクション サイズ: 6M 行、7G データ

クライアントは、最新の mongo-java ドライバーを使用した localhost (mac osx 10.8) です。

readpref = primaryPreferred で Java ドライバーを使用してクエリを実行する

 { "$and" : [{ "$or" : [ { "country" : "united states"}]} , { "$or" : [ { "registering_organization" : { "$regex" : "^.*itt.*hartford.*$"}} , { "registering_organization" : { "$regex" : "^.*met.*life.*$"}} , { "registering_organization" : { "$regex" : "^.*cardinal.*health.*$"}}]}]}

「country」と「registering_organization」の両方に通常のインデックスがあります。しかし、mongo docs によると、単一のクエリは 1 つのインデックスしか利用できず、上記のクエリの Explain() からも確認できます。

だから私の質問は、上記のクエリでより良いパフォーマンスを達成するための最良の代替手段は何ですか. 「and」操作を中断して、メモリ交差で行う必要があります。さらに進むと、クエリにも「Not」操作が含まれます。

私のアプリケーションは将来、レポート/分析に変わる可能性があると思いますが、それはすぐには実現しないか、それに応じて設計するつもりはありません。

4

1 に答える 1