2

フィルタリングしている値が連続していない場合に、CouchBase で複数のフィールドをフィルタリングする最善の方法を見つけようとしています。たとえば、次のフィールドを持つProductというテーブルがあるとします。

  • 製品番号

  • カテゴリ ID

  • 商品タイプ ID

  • 価格

そして、私は次のようなフィルターを実現しようとしています:

SELECT  * FROM Product WHERE CategoryID IN (1,5,7) AND ProductTypeId
IN (10, 12);

これを行う最善の方法は、各フィールドのビューを持ち、キーを使用してクエリとして IN を実行し (例: by_categoryId?keys=[1,5,7])、結果をアプリケーション コードに挿入することですか? または、これを行うより良い方法はありますか?(配列要素が連続していないため、範囲クエリは使用できないと思います)。

4

2 に答える 2

2

カウチベースの単純なビューでは、インデックスを 1 つしか持てないため、それを使用して 2 つ以上のフィールドでフィルタリングすることはできません。2次元インデックスを持つcouchbaseにも空間ビューがありますが、

地理空間サポートは、Couchbase Server 2.0 の実験的な機能として導入されました。この機能は現在サポートされておらず、デモンストレーションとテストの目的でのみ提供されています。

したがって、最初のバリアント: 1 つのフィールドでフィルター処理されたカウチベースからレコードを取得すると、結果が少なくなり、アプリ側で別のフィールドで結果をフィルター処理できます。

1:10, 1:12, 5:10, 5:12, 7:10, 7:122 番目のバリアント:アプリ側で"CategoryID:ProductTypeID" (つまり ) のようなペアを作成し、そのペアも生成するビュー (つまりemit(doc.catId + ":" + doc.prodTypeId)) を作成してクエリを実行できます。

3 番目のバリアント (私が好む): リレーショナル データベースを使用します。4 つのフィールドを持つ3 つのリレーションを数えますProduct。75% です。リレーショナル データモデルを取得しています。また、NoSQL の定義は、非リレーショナル、分散型、オープンソース、水平方向にスケーラブルであることなど、主にいくつかの点に対処する次世代データベースです。または、データモデルを変更できるかもしれません...

于 2013-07-01T14:01:50.997 に答える