Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Pianificatore di query v3
La versione 3 di Planner in Amazon DocumentDB 8.0 supporta 21 fasi di aggregazione, incluse 6 nuove fasi. Planner V3 è dotato di supporto integrato per comandi distinti. Offre un miglioramento delle prestazioni complessive fino a due volte superiore rispetto a Planner v2 in Amazon DocumentDB 5.0. Tutte le nuove funzionalità e gli operatori di Amazon DocumentDB 8.0 sono compatibili con Planner v3. Le nuove fasi di aggregazione in Amazon DocumentDB 8.0 supportate da Planner v3 includono $replaceWith, $vectorSearch, $merge, $set, $unset, $bucket. Planner v3 supporta anche nuove funzionalità e operatori in Amazon DocumentDB 8.0, tra cui Collation, Views, $merge, $pow, $rand, $dateTrunC, $, $. dateToParts dateFromParts
Argomenti
Prerequisiti
I seguenti prerequisiti si applicano alla versione 3.0 di Planner:
La versione 3.0 di Planner è disponibile in tutte le regioni in cui è disponibile la versione del motore 8.0.
La versione 3.0 di Planner è il pianificatore di query predefinito quando è selezionata la versione del motore 8.0.
Selezione della versione 3.0 del planner come pianificatore di query predefinito
Se hai modificato il tuo pianificatore di query predefinito in Amazon DocumentDB 8.0 e devi tornare al planner v3, puoi farlo dalla console o dalla CLI:
Segui i passaggi indicati per modificare il gruppo di parametri del Modifica dei parametri del cluster Amazon DocumentDB cluster.
Per il parametro intitolato 'PlannerVersion', modifica il valore su 3.0, che indica la versione 3.0 del planner.
Seleziona Applica immediatamente (selezionando Applica al riavvio la selezione verrà resa inefficace fino al successivo riavvio del cluster).
Best practice
Per i risultati previsti, utilizza le seguenti best practice quando applichi la versione 3.0 di Planner:
In un cluster globale, selezionate lo stesso
plannerVersionvalore (1.0 o 2.0 o 3.0) nei gruppi di parametri del cluster per entrambe le regioni. Tieni presente che la selezione di versioni diverse del planner nelle aree primarie e secondarie può causare prestazioni e comportamenti di interrogazione incoerenti.L'aggiornamento alla versione 3.0 di Planner durante una finestra di manutenzione programmata o durante periodi di traffico ridotto sarà la soluzione meno problematica, in quanto potrebbe verificarsi un aumento dei tassi di errore se la versione del planner viene modificata quando i carichi di lavoro sono in esecuzione attiva.
Limitazioni
Le seguenti limitazioni si applicano alla versione 3.0 di Planner:
La versione 3.0 di Planner non è supportata nei cluster elastici, che ritorneranno alla versione 1.0 di Planner.
Sebbene Planner v1 consenta l'uso di «PlanHint» per garantire che un piano di query specifico venga selezionato dall'ottimizzatore delle query, Planner v3 non consente l'uso di «PlanHint» e si basa su ottimizzazioni interne per scegliere il piano migliore per una determinata query.
Miglioramenti agli operatori aggregatedistinct
La versione 3.0 di Planner introduce miglioramenti nelle fasi $aggregate e nel comando $distinct. Di seguito sono riportati alcuni dei miglioramenti più importanti.
Quando possibile, il planner sposta le fasi di $match nelle fasi iniziali della pipeline, riducendo il numero di documenti elaborati nelle fasi successive.
//Planner v1 db.orders.aggregate([ { $project: { customerId: 1, orderDate: 1, totalAmount: 1 } }, { $match: { customerId: { $gt: 1000 } } } ]) // Planner v3 pulls up the match since customerId exists in original documents // Optimized internally as: db.orders.aggregate([ { $match: { customerId: { $gt: 1000 } } }, // Pulled up before project { $project: { customerId: 1, orderDate: 1, totalAmount: 1 } } ])Il planner combina automaticamente le fasi $lookup e $unwind quando operano sullo stesso campo, riducendo l'elaborazione intermedia dei dati e migliorando le prestazioni.
Example query: //Planner v1 db.orders.aggregate([ { $lookup: { from: "products", localField: "productId", foreignField: "_id", as: "productInfo" } }, { $unwind: "$productInfo" }, { $project: { orderDate: 1, "productInfo.name": 1, "productInfo.price": 1 } } ]) // Planner version 3.0 optimizes this internally by coalescing the $lookup and $unwind stagesLa versione 3.0 di Planner introduce una nuova strategia di esecuzione Distinct Scan che migliora significativamente le prestazioni per operazioni distinte su indici a bassa cardinalità.
Example query: //// If there is a low cardinality index on "category", you may see a query plan like below db.explain().products.distinct("category") "queryPlanner" : { "plannerVersion" : 3, "namespace" : "db.products", "winningPlan" : { "stage" : "AGGREGATE", "inputStage" : { "stage" : "DISTINCT_SCAN", "inputStage" : { "stage" : "IXONLYSCAN", "indexName" : "category_1", "direction" : "forward" } } } }
Potenziali differenze di comportamento tra la versione 1.0, 3.0 e MongoDB di Planner
In alcuni casi limite, è possibile che la versione 3.0 di Planner produca risultati leggermente diversi dalla versione 1.0 di Planner. Questa sezione illustra alcuni esempi di queste possibilità.