Pregunta

Todos advierten que no consulten contra otra cosa que no sea RowKey o PartitionKey en Azure Table Storage (ATS), para que no se vea obligado a escanear en la mesa. Durante un tiempo, esto me ha paralizado para que intente encontrar exactamente los PK y RK correctos y crear índices pseudosecundarios en otras tablas cuando necesitaba consultar algo más.

Sin embargo, se me ocurre que comúnmente me escanearía en el servidor SQL cuando pensara apropiado.

Entonces, la pregunta es, ¿qué tan rápido puedo escanear una tabla Azure? ¿Es esto una constante en las entidades/segundo o depende del tamaño de registro, etc.?

¿Fue útil?

Solución

El problema de un escaneo de tabla tiene que ver con el cruce de los límites de la partición. El nivel de rendimiento que está garantizado es una explicidad establecida en el nivel de partición. Por lo tanto, cuando ejecuta un escaneo de tabla completo, a) no es muy eficiente, b) no tiene ninguna garantía de rendimiento. Esto se debe a que las particiones en sí están establecidas en nodos de almacenamiento separados, y cuando ejecuta un escaneo de partición cruzada, está consumiendo cantidades potencialmente masivas de recursos (vinculando múltiples nodos simultáneamente).

Creo que el efecto de cruzar estos límites también resulta en tokens de continuación, que requieren viajes de ultres de reducción adicionales para el almacenamiento para recuperar los resultados. Esto se produce luego en la reducción del rendimiento, así como un aumento en los recuentos de transacciones (y posteriormente el costo).

Si el número de particiones/nodos que está cruzando es bastante pequeño, es probable que no note ningún problema.

Pero por favor no me citen sobre esto. No soy un experto en almacenamiento de Azure. En realidad, es el área de Azure del que soy el menos conocedor. :PAGS

Otros consejos

Creo que Brent está al 100% en el dinero, pero si todavía sientes que quieres probarlo, solo puedo sugerir hacer algunas pruebas para descubrirte a ti mismo. Intente incluir el PartitionKey en sus consultas para evitar que las particiones de cruce porque al final del día ese es el asesino de rendimiento.

Las tablas Azure no están optimizadas para escaneos de mesa. Escanear la tabla puede ser aceptable para un trabajo de fondo de larga duración, pero no lo haría cuando se necesita una respuesta rápida. Con una tabla de cualquier tamaño razonable, deberá manejar los tokens de continuación, ya que la consulta alcanza un límite de partición u obtiene resultados de 1K.

El equipo de almacenamiento de Azure tiene un Gran publicación que explica los objetivos de escalabilidad. El objetivo de rendimiento para una sola tabla es 500 entidades/seg. El objetivo general para una cuenta de almacenamiento es de 5,000 transacciones/seg.

La respuesta es la paginación. Utilizar el top_size - Número máximo de resultados o registros en resultado- junto con next_partition_key y next_row_key Los tokens de continuación. Eso hace una diferencia factorial significativa en el rendimiento. Por un lado, sus resultados son estadísticamente más propensos a provenir de una sola partición. Los resultados simples muestran que los conjuntos se agrupan mediante la tecla de continuación de la partición y no la tecla de continua de fila.

En otras palabras, también debe pensar en su interfaz de usuario o salida del sistema. No se moleste en devolver más de 10 a 20 resultados Máx 50. El usuario probablemente no utilice ni examine más.

Suena tonto. Haga una búsqueda en Google de "perro" y observe que la búsqueda devuelve solo 10 elementos. No más. Los siguientes registros están disponibles para usted si se molesta en presionar 'Continuar'. La investigación ha demostrado que casi ninguna aventura de usuario más allá de esa primera página.

la select (devolver un subconjunto de los valores clave) puede marcar la diferencia; Por ejemplo, usa select = "PartitionKey,RowKey" o 'Name' el mínimo que necesite.

"Creo que el efecto de cruzar estos límites también resulta en tokens de continuación, que requieren viajes de ultres de reducción adicionales al almacenamiento para recuperar los resultados. Estos resultados para reducir el rendimiento, así como un aumento en los recuentos de transacciones (y posteriormente costo) "

... es ligeramente incorrecto. El token de continuación se usa no por límites de cruce sino porque las tablas de Azure no permiten más de 1000 resultados; Por lo tanto, los dos tokens de continuación se usan para el siguiente conjunto. Top_size predeterminado es esencialmente 1000.

Para su placer visual, aquí está la descripción de las entidades de consultas de la API de Azure Python. otros son muy iguales.

  '''
  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']
  '''
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top