私は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 を使用して作成してください。",