1

私はcouchbaseを初めて使用し、N1QLを使用していくつかのクエリを実行していますが、多くの時間がかかります(9分) 私のデータには200.000のドキュメントがあり、ドキュメントにはネストされたタイプがあり、ドキュメント内のネストされたタイプの数は6.000.000です200.000 ドキュメント間で分散されているため、UNNEST 操作は重要です。私のデータの1つのサンプルは次のとおりです。

{"p_partkey": 2, "lineorder": [{"customer": [{"c_city": "INDONESIA1"}], "lo_supplycost": 54120, "orderdate": [{"d_weeknuminyear": 19}], "supplier": [{"s_phone": "16-789-973-6601|"}], "commitdate": [{"d_year": 1993}], "lo_tax": 7}, {"customer": [{...

私がやっているクエリの1つは次のとおりです。

SELECT SUM(l.lo_extendedprice*l.lo_discount*0.01) as revenue
from part p UNNEST p.lineorder l UNNEST l.orderdate o 
where o.d_year=1993 and l.lo_discount between 1 and 3 and l.lo_quantity<25;

データには上記のフィールドがあります。ただし、実行には 9 分かかります。私はそれを行うために自分のコンピューターのみを使用しているため、ノードは 1 つだけです。私のコンピューターには 16 GB の RAM があり、クラスター RAM コタは 3.2 GB で、3 GB のバケットが 1 つだけです。私のデータの合計サイズは 2.45 GB です。ここに記載されている計算を使用しました: http://docs.couchbase.com/admin/admin/Concepts/bp-sizingGuidelines.htmlクラスターとバケットのサイズを設定します。私は何か間違ったことをしていますか、それともこの量のデータに対して今回は正しいですか?

今のところ、次のようなインデックスを作成しました。

CREATE INDEX idx_discount ON part( DISTINCT ARRAY l.lo_discount FOR l IN lineorder END );

CREATE INDEX idx_quantity ON part( DISTINCT ARRAY l.lo_quantity FOR l IN lineorder END );

CREATE INDEX idx_year ON part( DISTINCT ARRAY o.d_year FOR o IN ( DISTINCT ARRAY l.orderdate FOR l IN lineorder END ) END );

しかし、データベースはそれを使用しません。

クエリの例は次のとおりです。

SELECT SUM(l.lo_extendedprice*l.lo_discount*0.01) as revenue
from part p UNNEST p.lineorder l UNNEST l.orderdate o 
where o.d_year=1993 and l.lo_discount between 1 and 3 and l.lo_quantity<25;

別の例として、インデックスを作成しました。

CREATE INDEX teste3 ON `part` (DISTINCT ARRAY l.lo_quantity FOR l IN lineorder END );

と尋ねた:

select l.lo_quantity from part as p UNNEST p.lineorder l where l.lo_quantity>20 limit 3

プライマリ インデックスを削除したため、実行されません。エラーを返す: "キースペース部分にプライマリ インデックスがありません。CREATE PRIMARY INDEX を使用して作成してください。",

4

2 に答える 2