Простой запрос AWS Neptune подсчета opencypher занимает слишком много времени

У меня есть графическая база данных в AWS neptune с 60 миллионами узлов. Простой запрос на подсчет всех узлов занимает ~6-7 минут.

запрос:

      MATCH (n)
RETURN count(n) as count

Нормально ли считать 60 миллионов узлов за 6 минут? что я могу сделать, чтобы сделать это быстрее?

Объясните (отладьте) результат для этого запроса:

      Query:
// all nodes count
MATCH (n)
RETURN count(n) as cnt


ID  Out #1  Out #2  Name    Arguments   Mode    Units In    Units Out   Ratio   Time (ms)   Chunks In   Chunks Out  Units In (per chunk)    Units Out (per chunk)   Invocations OutWaitMs   Out Blocked Rate [M/s]  GCElapsedMs blocksIncGC blocksDecGC progressCount   init [ms]   done [ms]   finalize [ms]
0   1   -   SolutionInjection   solutions=[{}]  -   0   1   0.00    0   0   0   0.00    0.00    0   0   0   NaN
1   2   -   DFESubquery subQuery=subQuery1
partitionId=0
details= ====> DFE execution time toPASTModel [micros]=213 accepted [micros]=60 ready [micros]=214 running [micros]=68035522 finished [micros]=0 ===> DFE execution time (measured in DFENode) -> setupTime [ms]=0 -> executionTime [ms]=68038 -> resultReadTime [ms]=0 ====> Original AST: DFEJoinGroupNode[]( children=[ DFEProjectionNode[NONE]( projectedVars=[?cnt], child=DFEAggregationNode[NONE]( groupByVars=[], aggregateExpressions=[ DFEAggregateExpression(aggregate=DFEBindNode(countWithoutNulls(?n) AS ?cnt), isDistinct=false)], child=DFEJoinGroupNode[]( children=[ DFEPatternNode((?n, TermId(782U)[http://www.w3.org/1999/02/22-rdf-syntax-ns#type], ?n_label1, TermId(526U)[http://aws.amazon.com/neptune/vocab/v01/DefaultNamedGraph]) . project DISTINCT[?n] {rangeCountEstimate=78682901})], opInfo=none), opInfo=none), opInfo=none)], opInfo=none) ====> Preprocessed AST: DFEProjectionNode[NONE]( projectedVars=[?cnt], child=DFEAggregationNode[NONE]( groupByVars=[], aggregateExpressions=[ DFEAggregateExpression(aggregate=DFEBindNode(countWithoutNulls(?n) AS ?cnt), isDistinct=false)], child=DFEPatternNode((?n, TermId(782U)[http://www.w3.org/1999/02/22-rdf-syntax-ns#type], ?n_label1, TermId(526U)[http://aws.amazon.com/neptune/vocab/v01/DefaultNamedGraph]) . project DISTINCT[?n] {rangeCountEstimate=78682901}), opInfo=(type=NoneOperatorStub, cost=(exp=(empty),wc=(empty)))), opInfo=(type=SubQuery, cost=(exp=(empty),wc=(empty)))) ===> DFE configuration (given) solutionChunkSize=100000 outputQueueSize=20 numComputeCores=3 maxParallelIO=5 numInitialPermits=0 frontiersAsInFilters=true partitionId=0 isExplainRequested=true languageSpecifier=Open_Cypher planVariant=all/BLOCKING readForUpdate=false ====> DFE configuration (reported) numComputeCores=3 numIOThreads=1 numInitialPermits=1 permitsSecured=1732 ===> Top level Statistics & operator histogram ==> Statistics -> 68032185 / 68026188 micros total elapsed (incl. wait / excl. wait) -> 68032 / 68026 millis total elapsed (incl. wait / excl. wait) -> 68 / 68 secs total elapsed (incl. wait / excl. wait) ==> GC Summary -> 40.68ms spent in GC (0.06% of total time) ==> Operator histogram (all times are excluding wait) -> Total Operator #instances: 4 Operator │ Time(ms) │ Time(%) │ rowsIn │ rowsOut │ chunksIn │ chunksOut │ instances │ invocation │ in(M/s) │ out(M/s) │ time/chunkIn(ms) │ time/chunkOut(ms) │ time/invoc(ms) │ GC(ms) │ GC(%) ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── pipelineScan │ 67518 │ 99.25% │ 0 │ 60341570 │ 0 │ 1751 │ 1 │ 1 │ 0.00 │ 0.89 │ - │ 38.56 │ 67518 │ 17.67 │ 0.03 merge │ 415 │ 0.61% │ 60341570 │ 60341570 │ 1751 │ 1 │ 1 │ 1 │ 145.53 │ 145.53 │ 0.24 │ 415 │ 415 │ 6.05 │ 1.46 daslReduce │ 93.86 │ 0.14% │ 60341570 │ 1 │ 1 │ 1 │ 1 │ 1 │ 642.91 │ 0.00 │ 93.86 │ 93.86 │ 93.86 │ 16.94 │ 18.05 drain │ 0.06 │ 0.00% │ 1 │ 0 │ 1 │ 0 │ 1 │ 1 │ 0.02 │ 0.00 │ 0.06 │ - │ 0.06 │ 0.02 │ 25.00 -   0   1   0.00    68048   0   1   0.00    1.00    2   0   0   0.00
2   -   -   TermResolution  vars=[?cnt] id2value_opencypher 1   1   1.00    1.00    1   1   1.00    1.00    1   0   0   0.00
subQuery1
ID  Out #1  Out #2  Name    Arguments   Mode    Units In    Units Out   Ratio   Time (ms)   Chunks In   Chunks Out  Units In (per chunk)    Units Out (per chunk)   Invocations OutWaitMs   Out Blocked Rate [M/s]  GCElapsedMs blocksIncGC blocksDecGC progressCount   init [ms]   done [ms]   finalize [ms]
0   1   -   DFEPipelineScan pattern=distinct ?n (?n,rdf:type,?n_label1,neptune:DefaultNamedGraph)
outSchema=[?n]
patternEstimate=78682901    -   0   60341570    0.00    67518   0   1751    0.00    34461.21    1   5.97    0   0.89
1   2   -   DFEMergeChunks  inSchema=[?n]
outSchema=[?n]  -   60341570    60341570    1.00    415 1751    1   34461.21    60341570.00 1   0.01    0   145.53
2   3   -   DFEReduce   functor=countWithoutNulls(?n)
inSchema=[?n]
outSchema=[?cnt]    -   60341570    1   0.00    93.86   1   1   60341570.00 1.00    1   0.01    0   0.00
3   -   -   DFEDrain    inSchema=[?cnt]
outSchema=[?cnt]    -   1   0   0.00    0.06    1   0   1.00    0.00    1   0   0   0.00

Объясните (подробно) результаты:

ВЫПОЛНИТЕ ЭТОТ ФРАГМЕНТ НИЖЕ ДЛЯ ЛУЧШЕЙ ЧИТАЕМОСТИ

1 ответ

Начиная с версии Neptune 1.2.1.0, у нас теперь есть Summary API, который может предоставлять как количество вершин, так и количество ребер. Он также предоставит общий список различных меток вершин/ребер и общее количество меток свойств.

https://aws.amazon.com/about-aws/whats-new/2023/03/amazon-neptune-graph-summary-api/

Другие вопросы по тегам