Domanda

Ognuno non avverte di query su qualcosa di diverso da RowKey o PartitionKey in Azure Storage Table (ATS), per non essere costretti a scansione di tabella. Per un po ', questo mi ha paralizzato per cercare di venire con esattamente la PK destra e RK e la creazione di indici pseudo-secondaria in altri tavoli quando avevo bisogno di query di qualcos'altro.

Tuttavia, mi viene in mente che avrei scansione comunemente tabella in SQL Server quando ho pensato appropriata.

Quindi la domanda diventa, quanto velocemente possibile tabella I di scansione di una tabella di Azure. Si tratta di una costante in entità / secondo o dipende dalle dimensioni di registrazione, ecc Ci sono alcune regole pratiche per il numero di record è troppo molti a scansione di tabella se si desidera un'applicazione reattivo?

È stato utile?

Soluzione

Il problema di una scansione di tabella ha a che fare con attraversando i confini della partizione. Il livello di prestazioni si sono garantiti è impostato esplicitamente a livello di partizione. Pertanto, quando si esegue una scansione completa della tabella, la sua a) non molto efficiente, b) non ha alcuna garanzia di prestazioni. Questo perché le partizioni stessi si trovano su nodi di storage separati, e quando si esegue una scansione delle partizioni croce, si sta consumando potenzialmente enormi quantità di risorse (tieing up più nodi contemporaneamente).

Io credo, che l'effetto di attraversare questi confini si traduce anche in gettoni continuazione, che richiedono ulteriori viaggi di andata e allo stoccaggio per recuperare i risultati. Questo risultato quindi a ridurre le prestazioni, così come un aumento della conta delle transazioni (e successivamente dei costi).

Se il numero di partizioni / te nodi Incrociamo è abbastanza piccolo, probabilmente sarà non nota la presenza di problemi.

Ma per favore non mi citare su questo. Io non sono un esperto di Azure. Il suo in realtà l'area di Azure sono il circa almeno informato. : P

Altri suggerimenti

Credo che Brent è al 100% sui soldi, ma se si sente ancora che si desidera provare, posso solo suggerire di eseguire alcuni test per scoprire se stessi. Provare a includere il PartitionKey nelle query per impedire l'attraversamento partizioni perché alla fine della giornata che è il killer prestazioni.

tavoli Azure non sono ottimizzati per le scansioni di tabella. Leggendo la tabella potrebbe essere accettabile per un processo in background a lungo in esecuzione, ma io non lo farebbe quando è necessaria una risposta rapida. Con una tabella di qualsiasi dimensione ragionevole si dovrà gettoni maniglia continuazione come la query raggiunge un limite di partizione o ottiene 1k risultati.

Il team di archiviazione Azure ha un grande post che spiega la scalabilità obiettivi . L'obiettivo di throughput per una singola partizione tabella è di 500 enti / sec. L'obiettivo globale per un account di archiviazione è di 5.000 transazioni / sec.

La risposta è paginazione. Utilizzare il top_size - numero massimo di risultati o annotazioni in seguito - in collaborazione con next_partition_key e next_row_key i token di continuazione. Che fa una significativa differenza fattoriale, anche in termini di prestazioni. Per uno, i risultati sono statisticamente più probabile che provengono da una singola partizione. risultati strisciamento mostrano che gli insiemi sono raggruppati per la chiave di partizione continuazione e non la riga continuare chiave.

In altre parole, è anche bisogno di pensare alla tua interfaccia utente o uscita del sistema. Non preoccupatevi di tornare più di 10 a 20 risultati max 50. L'utente probabilmente non utilizzano o esaminare qualsiasi altro ancora.

Suoni sciocco. Fate una ricerca su Google per "cane" e notare che la ricerca restituisce solo 10 articoli. Non piu. I prossimi record sono inutilmente per voi, se si preoccupano di hit 'continuare'. La ricerca ha dimostrato che quasi nessuno venture utente al di là di quella prima pagina.

il select (restituendo un sottoinsieme dei valori-chiave) può fare la differenza; per esempio, l'uso select = "PartitionKey,RowKey" o 'Name' qualunque minima è necessario.

"Io credo, che l'effetto di attraversare questi confini anche risultati in gettoni continuazione, che richiedono ulteriori round trip a storage per recuperare i risultati. allora questo si traduce in riduzione prestazioni, così come un aumento della conta delle transazioni (e successivamente costo) ".

... è leggermente corretto. la continuazione del token viene utilizzato non per confini attraversano ma perché le tabelle azzurre non più di 1000 risultati permettano; quindi i due token di continuazione sono utilizzati per la serie successiva. top_size default è essenzialmente 1000.

Per il vostro piacere di osservazione, ecco la descrizione per le query entità dalla api pitone azzurro. altri sono più o meno lo stesso.

  '''
  Get entities in a table; includes the $filter and $select options. 

  table_name: Table to query.
  filter: 
     Optional. Filter as described at 
     http://msdn.microsoft.com/en-us/library/windowsazure/dd894031.aspx
  select: Optional. Property names to select from the entities.
  top: Optional. Maximum number of entities to return.
  next_partition_key: 
     Optional. When top is used, the next partition key is stored in
     result.x_ms_continuation['NextPartitionKey']
  next_row_key: 
     Optional. When top is used, the next partition key is stored in
     result.x_ms_continuation['NextRowKey']
  '''
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top