Estratégias de criação de partições de dados - Best practices for cloud applications | Microsoft Docs
Estratégias de criação de partições de dadosData partitioning strategies
Este artigo descreve algumas estratégias para a criação de partições de dados em vários arquivos de dados do Azure.This article describes some strategies for partitioning data in various Azure data stores. Para obter orientações gerais sobre o quando os dados de partição e melhores práticas, consulte a criação de partições de dadosFor general guidance about when to partition data and best practices, see Data partitioning
A criação de partições de base de dados SQL do AzurePartitioning Azure SQL Database
Uma única base de dados SQL tem um limite para o volume de dados que pode conter.A single SQL database has a limit to the volume of data that it can contain. O débito é limitado por fatores de arquitetura e pelo número de ligações simultâneas que suporta.Throughput is constrained by architectural factors and the number of concurrent connections that it supports.
Conjuntos elásticos suporta o dimensionamento horizontal para uma base de dados SQL.Elastic pools support horizontal scaling for a SQL database. Utilizar conjuntos elásticos, pode particionar os dados em partições horizontais que são distribuídas por várias bases de dados do SQL.Using elastic pools, you can partition your data into shards that are spread across multiple SQL databases. Também pode adicionar ou remover partições horizontais à medida que o volume de dados que precisa de processar cresce e diminui.You can also add or remove shards as the volume of data that you need to handle grows and shrinks. Conjuntos elásticos também podem ajudar a reduzir a contenção ao distribuir a carga entre bases de dados.Elastic pools can also help reduce contention by distributing the load across databases.
Cada partição horizontal é implementada como uma base de dados SQL.Each shard is implemented as a SQL database. Uma partição horizontal pode conter mais de um conjunto de dados (chamado um shardlet).A shard can hold more than one dataset (called a shardlet). Cada base de dados mantém metadados que descrevem os shardlets nela contidos.Each database maintains metadata that describes the shardlets that it contains. Um shardlet pode ser um item de dados individual ou um grupo de itens que partilham a mesma chave shardlet.A shardlet can be a single data item, or a group of items that share the same shardlet key. Por exemplo, numa aplicação multi-inquilino, a chave shardlet pode ser o ID de inquilino e todos os dados para um inquilino podem ser mantidos em do mesmo shardlet.For example, in a multitenant application, the shardlet key can be the tenant ID, and all data for a tenant can be held in the same shardlet.
Aplicativos cliente são responsáveis por associação de um conjunto de dados com uma chave shardlet.Client applications are responsible for associating a dataset with a shardlet key. Uma base de dados SQL separada atua como um gestor global dos mapas das partições horizontais.A separate SQL database acts as a global shard map manager. Esta base de dados tem uma lista de todas as partições horizontais e shardlets do sistema.This database has a list of all the shards and shardlets in the system. A aplicação liga-se para a base de dados da Gestor de mapas das partições horizontais para obter uma cópia do mapa de partições horizontais.The application connects to the shard map manager database to obtain a copy of the shard map. Ele armazena em cache localmente o mapa de partições horizontais e utiliza o mapa para encaminhar pedidos de dados para a partição horizontal adequada.It caches the shard map locally, and uses the map to route data requests to the appropriate shard. Esta funcionalidade fica oculta por trás de uma série de APIs que estão contidas na biblioteca de clientes de bases de dados elásticas, que está disponível para Java e .NET.This functionality is hidden behind a series of APIs that are contained in the Elastic Database client library, which is available for Java and .NET.
Para obter mais informações sobre conjuntos elásticos, veja aumentar horizontalmente com a base de dados do Azure SQL.For more information about elastic pools, see Scaling out with Azure SQL Database.
Para reduzir a latência e melhorar a disponibilidade, pode replicar a base de dados de Gestor de mapas de partições horizontais global.To reduce latency and improve availability, you can replicate the global shard map manager database. Com o escalões de preços Premium, pode configurar a georreplicação ativa para copiar dados continuamente a bases de dados em regiões diferentes.With the Premium pricing tiers, you can configure active geo-replication to continuously copy data to databases in different regions.
Em alternativa, utilize sincronização de dados SQL do Azure ou do Azure Data Factory para replicar a base de dados de Gestor de mapas de partições horizontais em várias regiões.Alternatively, use Azure SQL Data Sync or Azure Data Factory to replicate the shard map manager database across regions. Essa forma de replicação é executado periodicamente e é mais adequada se o mapa de partições horizontais muda com pouca frequência e não necessita de escalão Premium.This form of replication runs periodically and is more suitable if the shard map changes infrequently, and does not require Premium tier.
A Base de Dados Elástica fornece dois esquemas de mapeamento de dados para shardlets e o respetivo armazenamento nas partições horizontais:Elastic Database provides two schemes for mapping data to shardlets and storing them in shards:
R mapa de partições horizontais de lista associa uma única chave para um shardlet.A list shard map associates a single key to a shardlet. Por exemplo, num sistema multi-inquilino, os dados de cada inquilino podem ser associados a uma chave exclusiva e armazenados no seu próprio shardlet.For example, in a multitenant system, the data for each tenant can be associated with a unique key and stored in its own shardlet. Para garantir o isolamento, cada shardlet pode ser contido dentro de seu próprio fragmento.To guarantee isolation, each shardlet can be held within its own shard.
R mapa de partições horizontais de intervalo associa um conjunto de valores de chave contínuos para um shardlet.A range shard map associates a set of contiguous key values to a shardlet. Por exemplo, pode agrupar os dados para um conjunto de inquilinos (cada um com sua própria chave) dentro do mesmo shardlet.For example, you can group the data for a set of tenants (each with their own key) within the same shardlet. Este esquema é menos dispendioso do que o primeiro, porque os inquilinos partilham o armazenamento de dados, mas tem menos isolamento.This scheme is less expensive than the first, because tenants share data storage, but has less isolation.
Uma única partição horizontal pode conter os dados de várias shardlets.A single shard can contain the data for several shardlets. Por exemplo, pode utilizar shardlets de lista para armazenar dados de diferentes inquilinos não contínuos na mesma partição horizontal.For example, you can use list shardlets to store data for different non-contiguous tenants in the same shard. Também pode combinar shardlets de intervalo e shardlets de lista na mesma partição horizontal, embora estes sejam resolvidos através de mapas diferentes.You can also mix range shardlets and list shardlets in the same shard, although they will be addressed through different maps. O diagrama seguinte mostra esta abordagem:The following diagram shows this approach:
Conjuntos elásticos tornam possível adicionar e remover partições horizontais, como o volume de dados diminui e aumenta.Elastic pools make it possible to add and remove shards as the volume of data shrinks and grows. Aplicações de cliente podem criar e eliminar partições horizontais dinamicamente e atualizada de forma transparente o Gestor de mapas de partições horizontais.Client applications can create and delete shards dynamically, and transparently update the shard map manager. No entanto, a remoção de uma partição horizontal é uma operação destrutiva que também requer a eliminação de todos os dados nessa partição horizontal.However, removing a shard is a destructive operation that also requires deleting all the data in that shard.
Se uma aplicação precisa de dividir uma partição horizontal em duas partições horizontais separadas ou partições horizontais de combinação, utilize o ferramenta de dividir / unir.If an application needs to split a shard into two separate shards or combine shards, use the split-merge tool. Essa ferramenta é executada como um serviço web do Azure e migra os dados com segurança entre partições horizontais.This tool runs as an Azure web service, and migrates data safely between shards.
O esquema de partição pode afetar significativamente o desempenho do seu sistema.The partitioning scheme can significantly affect the performance of your system. Ele também pode afetar a velocidade a que as partições horizontais têm de ser adicionados ou removidos ou com os dados têm de ser divididos novamente em partições horizontais.It can also affect the rate at which shards have to be added or removed, or that data must be repartitioned across shards. Considere os seguintes pontos:Consider the following points:
Agrupe os dados que são utilizados em conjunto na mesma partição horizontal e evite operações que acedem a dados de várias partições horizontais.Group data that is used together in the same shard, and avoid operations that access data from multiple shards. Uma partição horizontal é uma base de dados SQL no seu próprio direito, e as associações entre bases de dados tem de ser efetuadas no lado do cliente.A shard is a SQL database in its own right, and cross-database joins must be performed on the client side.
Embora a base de dados SQL não suporta associações entre bases de dados, pode utilizar as ferramentas de bases de dados elásticas para efetuar consultas de vários fragmentos.Although SQL Database does not support cross-database joins, you can use the Elastic Database tools to perform multi-shard queries. Uma consulta de vários fragmentos envia consultas individuais para cada base de dados e une os resultados.A multi-shard query sends individual queries to each database and merges the results.
Não Estruture um sistema que tenha dependências entre partições horizontais.Don't design a system that has dependencies between shards. Restrições de integridade referencial, acionadores e procedimentos armazenados numa base de dados não podem referenciar objetos noutra.Referential integrity constraints, triggers, and stored procedures in one database cannot reference objects in another.
Se tiver dados de referência que é frequentemente utilizados pelas consultas, considere replicar estes dados em partições horizontais.If you have reference data that is frequently used by queries, consider replicating this data across shards. Essa abordagem pode remover a necessidade de associar dados entre bases de dados.This approach can remove the need to join data across databases. O ideal é que esses dados devem ser estáticos ou de movimento lento, para minimizar o esforço de replicação e reduzir as chances de se tornarem obsoletos.Ideally, such data should be static or slow-moving, to minimize the replication effort and reduce the chances of it becoming stale.
Shardlets que pertencem ao mesmo mapa de partições horizontais devem ter o mesmo esquema.Shardlets that belong to the same shard map should have the same schema. Esta regra não é imposta pela base de dados SQL, mas a gestão de dados e consulta torna-se muito complexa se cada shardlet tiver um esquema diferente.This rule is not enforced by SQL Database, but data management and querying becomes very complex if each shardlet has a different schema. Em vez disso, crie mapas de partições horizontais separadas para cada esquema.Instead, create separate shard maps for each schema. Lembre-se de que os dados que pertencem a diferentes shardlets podem ser armazenados na mesma partição horizontal.Remember that data belonging to different shardlets can be stored in the same shard.
Operações transacionais só são suportadas para dados numa partição horizontal e não entre partições horizontais.Transactional operations are only supported for data within a shard, and not across shards. As transações podem abranger shardlets, desde que façam parte da mesma partição horizontal.Transactions can span shardlets as long as they are part of the same shard. Por conseguinte, se a sua lógica de negócio precisar realizar transações, ou armazenar os dados na mesma partição horizontal ou implementar a consistência eventual.Therefore, if your business logic needs to perform transactions, either store the data in the same shard or implement eventual consistency.
Coloque partições horizontais próximas dos utilizadores que acedem os dados nessas partições horizontais.Place shards close to the users that access the data in those shards. Esta estratégia ajuda a reduzir a latência.This strategy helps reduce latency.
Evite ter uma combinação de partições horizontais altamente ativas e relativamente Inativas.Avoid having a mixture of highly active and relatively inactive shards. Tente distribuir a carga uniformemente por partições horizontais.Try to spread the load evenly across shards. Isto pode requerer o hash as chaves de fragmentação.This might require hashing the sharding keys. Se estiver a localizar partições horizontais geograficamente, certifique-se de que as chaves de hash mapeiam para shardlets mantidos em partições horizontais que estão armazenadas próximo dos utilizadores que acedem a esses dados.If you are geo-locating shards, make sure that the hashed keys map to shardlets held in shards stored close to the users that access that data.
Criação de partições de armazenamento de tabelas do AzurePartitioning Azure table storage
O armazenamento de tabelas do Azure é um arquivo de chave-valor que foi concebido para a criação de partições.Azure table storage is a key-value store that's designed around partitioning. Todas as entidades são armazenadas numa partição, e as partições são geridas internamente pelo armazenamento de tabelas do Azure.All entities are stored in a partition, and partitions are managed internally by Azure table storage. Cada entidade armazenada numa tabela tem de fornecer uma chave de duas partes, que inclui:Each entity stored in a table must provide a two-part key that includes:
A chave de partição.The partition key. Este é um valor de cadeia de caracteres que determina a partição em que o armazenamento de tabelas do Azure irá colocar a entidade.This is a string value that determines the partition where Azure table storage will place the entity. Todas as entidades com a mesma chave de partição são armazenadas na mesma partição.All entities with the same partition key are stored in the same partition.
A chave de linha.The row key. Este é um valor de cadeia de caracteres que identifica a entidade na partição.This is a string value that identifies the entity within the partition. Todas as entidades dentro de uma partição são ordenadas lexicalmente, por ordem ascendente por esta chave.All entities within a partition are sorted lexically, in ascending order, by this key. A combinação de chave de partição/chave de linha tem de ser exclusiva para cada entidade e não pode exceder 1 KB de comprimento.The partition key/row key combination must be unique for each entity and cannot exceed 1 KB in length.
Se uma entidade for adicionada a uma tabela com uma chave de partição que não foi utilizada anteriormente, o armazenamento de tabelas Azure cria uma nova partição para esta entidade.If an entity is added to a table with a previously unused partition key, Azure table storage creates a new partition for this entity. Outras entidades com a mesma chave de partição serão armazenadas na mesma partição.Other entities with the same partition key will be stored in the same partition.
Este mecanismo implementa de forma eficaz uma estratégia de escalamento horizontal automática.This mechanism effectively implements an automatic scale-out strategy. Cada partição é armazenada no mesmo servidor no datacenter do Azure para ajudar a garantir que as consultas que obtêm dados de uma única partição são executadas rapidamente.Each partition is stored on the same server in an Azure datacenter to help ensure that queries that retrieve data from a single partition run quickly.
A Microsoft publicou destinos de escalabilidade do armazenamento do Azure.Microsoft has published scalability targets for Azure Storage. Se o seu sistema é suscetível de exceder estes limites, considere a divisão de entidades em várias tabelas.If your system is likely to exceed these limits, consider splitting entities into multiple tables. Utilize a criação de partições verticais para dividir os campos em grupos com maior probabilidade de serem acedidos em conjunto.Use vertical partitioning to divide the fields into the groups that are most likely to be accessed together.
O diagrama seguinte mostra a estrutura lógica de uma conta de armazenamento de exemplo.The following diagram shows the logical structure of an example storage account. A conta de armazenamento contém três tabelas: Informações de clientes, informações sobre produtos e informações do pedido.The storage account contains three tables: Customer Info, Product Info, and Order Info.
Cada tabela tem várias partições.Each table has multiple partitions.
Na tabela informações de clientes, os dados estão particionados de acordo com a cidade em que o cliente esteja sediado.In the Customer Info table, the data is partitioned according to the city where the customer is located. A chave de linha contém o ID de cliente.The row key contains the customer ID.
Na tabela informações de produto, produtos estão particionados por categoria de produto e a chave de linha contém o número do produto.In the Product Info table, products are partitioned by product category, and the row key contains the product number.
Na tabela informações de encomendas, as encomendas estão particionadas pela data do pedido e a chave de linha especifica a hora de que receção da encomenda.In the Order Info table, the orders are partitioned by order date, and the row key specifies the time the order was received. Todos os dados estão ordenados pela chave de linha em cada partição.All data is ordered by the row key in each partition.
Ao estruturar as entidades para o armazenamento de tabelas do Azure, considere os seguintes pontos:Consider the following points when you design your entities for Azure table storage:
Selecione uma chave de partição e a chave de linha, como os dados são acedidos.Select a partition key and row key by how the data is accessed. Escolha uma combinação de chave de partição/chave de linha que suporte a maioria das suas consultas.Choose a partition key/row key combination that supports the majority of your queries. As consultas mais eficientes obtêm dados ao especificar a chave de partição e a chave de linha.The most efficient queries retrieve data by specifying the partition key and the row key. As consultas que especificam uma chave de partição e um intervalo de chaves de linha podem ser concluídas através da análise de uma única partição.Queries that specify a partition key and a range of row keys can be completed by scanning a single partition. Isto é relativamente rápido porque os dados são mantidos por ordem de chave de linha.This is relatively fast because the data is held in row key order. Se as consultas não especificarem a partição a analisar, cada partição deve ser analisada.If queries don't specify which partition to scan, every partition must be scanned.
Se uma entidade tiver uma chave natural, utilize-a como a chave de partição e especifique uma cadeia vazia como a chave de linha.If an entity has one natural key, then use it as the partition key and specify an empty string as the row key. Se uma entidade tiver uma chave composta consiste em duas propriedades, selecione a propriedade muda mais lentamente como a chave de partição e o outro como a chave de linha.If an entity has a composite key consisting of two properties, select the slowest changing property as the partition key and the other as the row key. Se uma entidade tiver mais de duas propriedades de chave, utilize uma concatenação das propriedades para fornecer as chaves de partição e de linha.If an entity has more than two key properties, use a concatenation of properties to provide the partition and row keys.
Se efetuar regularmente consultas que procuram dados com campos além as chaves de partição e de linha, considere implementar o padrão de tabela de índice, ou considere a utilização de um arquivo de dados diferentes que suporte a indexação, por exemplo, o Cosmos DB .If you regularly perform queries that look up data by using fields other than the partition and row keys, consider implementing the Index Table pattern, or consider using a different data store that supports indexing, such as Cosmos DB.
Se gerar chaves de partição utilizando uma sequência monotónica (como "0001", "0002", "0003") e cada partição apenas contiver uma quantidade limitada de dados, armazenamento de tabelas do Azure pode agrupar estas partições em conjunto no mesmo servidor fisicamente.If you generate partition keys by using a monotonic sequence (such as "0001", "0002", "0003") and each partition only contains a limited amount of data, Azure table storage can physically group these partitions together on the same server. O armazenamento do Azure parte do princípio de que o aplicativo é mais provável executar consultas num intervalo contínuo de partições (consultas de intervalo) e é otimizado para este caso.Azure Storage assumes that the application is most likely to perform queries across a contiguous range of partitions (range queries) and is optimized for this case. No entanto, essa abordagem pode levar a hotspots, uma vez que todas as inserções de novas entidades têm probabilidades de ser concentradas numa extremidade o intervalo contínuo.However, this approach can lead to hotspots, because all insertions of new entities are likely to be concentrated at one end the contiguous range. Também pode reduzir a escalabilidade.It can also reduce scalability. Para distribuir a carga mais uniformemente, considere o hash da chave de partição.To spread the load more evenly, consider hashing the partition key.
O armazenamento de tabelas do Azure suporta operações transacionais para entidades que pertencem à mesma partição.Azure table storage supports transactional operations for entities that belong to the same partition. Uma aplicação pode efetuar várias insert, update, delete, substituir ou operações de intercalação como uma unidade atômica, desde que a transação não inclua mais do que 100 entidades e o payload do pedido não exceda 4 MB.An application can perform multiple insert, update, delete, replace, or merge operations as an atomic unit, as long as the transaction doesn't include more than 100 entities and the payload of the request doesn't exceed 4 MB. Operações que abrangem várias partições não são transacionais e podem implicar a implementar a consistência eventual.Operations that span multiple partitions are not transactional, and might require you to implement eventual consistency. Para obter mais informações sobre o armazenamento de tabelas e transações, consulte efetuar transações de grupo de entidades.For more information about table storage and transactions, see Performing entity group transactions.
Considere a granularidade da chave de partição:Consider the granularity of the partition key:
Utilizar a mesma chave de partição para cada entidade resulta numa única partição, que é mantida num servidor.Using the same partition key for every entity results in a single partition that's held on one server. Isso impede que a partição de aumentar horizontalmente e concentra-se a carga num único servidor.This prevents the partition from scaling out and focuses the load on a single server. Como resultado, esta abordagem só é adequada para armazenar um número pequeno de entidades.As a result, this approach is only suitable for storing a small number of entities. No entanto, certifique-se que todas as entidades podem participar em transações de grupo de entidades.However, it does ensure that all entities can participate in entity group transactions.
Utilizar uma chave de partição exclusiva para cada entidade faz com que o serviço de armazenamento de tabelas crie uma partição separada para cada entidade, resultando possivelmente num grande número de partições pequenas.Using a unique partition key for every entity causes the table storage service to create a separate partition for each entity, possibly resulting in a large number of small partitions. Esta abordagem é mais dimensionável do que utilizar uma chave de partição única, mas as transações do grupo de entidades não são possíveis.This approach is more scalable than using a single partition key, but entity group transactions are not possible. Além disso, as consultas que obtêm mais do que uma entidade poderão envolver a leitura de mais do que um servidor.Also, queries that fetch more than one entity might involve reading from more than one server. No entanto, se a aplicação executa consultas de intervalo, em seguida, utilizar uma sequência monotónica para as chaves de partição pode ajudar a otimizar estas consultas.However, if the application performs range queries, then using a monotonic sequence for the partition keys might help to optimize these queries.
Partilhar a chave de partição entre um subconjunto de entidades torna possível para o grupo de entidades relacionadas na mesma partição.Sharing the partition key across a subset of entities makes it possible to group related entities in the same partition. As operações que envolvem entidades relacionadas podem ser efetuadas através da utilização de transações do grupo de entidades e as consultas que obtêm um conjunto de entidades relacionadas podem ser concluídas ao aceder a um único servidor.Operations that involve related entities can be performed by using entity group transactions, and queries that fetch a set of related entities can be satisfied by accessing a single server.
Para obter mais informações, consulte Manual de Criação de Tabelas de Armazenamento do Azure.For more information, see Azure storage table design guide.
Criação de partições de armazenamento de blobs do AzurePartitioning Azure blob storage
Armazenamento de Blobs do Azure torna possível armazenar objetos binários grandes.Azure blob storage makes it possible to hold large binary objects. Utilize blobs de blocos em cenários quando precisar de carregar ou transferir grandes volumes de dados rapidamente.Use block blobs in scenarios when you need to upload or download large volumes of data quickly. Utilize blobs de páginas para aplicações que requerem acesso aleatório, em vez de acesso de série a partes dos dados.Use page blobs for applications that require random rather than serial access to parts of the data.
Cada blob (de blocos ou de páginas) é mantido num contentor numa conta de armazenamento do Azure.Each blob (either block or page) is held in a container in an Azure storage account. Pode utilizar contentores para agrupar blobs relacionados que têm os mesmos requisitos de segurança.You can use containers to group related blobs that have the same security requirements. Este agrupamento é lógico, em vez de físico.This grouping is logical rather than physical. Dentro de um contentor, cada blob tem um nome exclusivo.Inside a container, each blob has a unique name.
A chave de partição para um blob é o nome da conta + nome do contentor + nome do blob.The partition key for a blob is account name + container name + blob name. A chave de partição é utilizada para a partição de dados em intervalos e estes intervalos são com balanceamento de carga em todo o sistema.The partition key is used to partition data into ranges and these ranges are load-balanced across the system. Os blobs podem ser distribuídos por vários servidores para aumentar horizontalmente o acesso aos mesmos, mas um blob individual só pode ser servido por um único servidor.Blobs can be distributed across many servers in order to scale out access to them, but a single blob can only be served by a single server.
Se o esquema de nomenclatura utiliza carimbos ou identificadores numéricos, pode levar ao tráfego excessivo vai para uma partição, com eficiência a limitar o sistema de balanceamento de carga.If your naming scheme uses timestamps or numerical identifiers, it can lead to excessive traffic going to one partition, limiting the system from effectively load balancing. Por exemplo, se tiver as operações diárias que utilizam como um objeto de blob com um carimbo dd-mm-aaaa, todo o tráfego para essa operação iria para um servidor de partição única.For instance, if you have daily operations that use a blob object with a timestamp such as yyyy-mm-dd, all the traffic for that operation would go to a single partition server. Em vez disso, considere o prefixo do nome com um hash de três dígitos.Instead, consider prefixing the name with a three-digit hash. Para obter mais informações, consulte Convenção de nomenclatura de partiçãoFor more information, see Partition Naming Convention
As ações de escrita de um único bloco ou uma página são atómicas, mas as operações que abrangem blocos, páginas ou blobs não são.The actions of writing a single block or page are atomic, but operations that span blocks, pages, or blobs are not. Se precisar de assegurar a consistência ao executar operações de escrita em blocos, páginas e blobs, remova um bloqueio de escrita, utilizando uma concessão de blob.If you need to ensure consistency when performing write operations across blocks, pages, and blobs, take out a write lock by using a blob lease.
Criação de partições de filas de armazenamento do AzurePartitioning Azure storage queues
As filas de armazenamento do Azure permitem-lhe implementar mensagens assíncronas entre processos.Azure storage queues enable you to implement asynchronous messaging between processes. Uma conta de armazenamento do Azure pode conter qualquer número de filas, e cada fila pode conter qualquer número de mensagens.An Azure storage account can contain any number of queues, and each queue can contain any number of messages. A única limitação é o espaço disponível na conta de armazenamento.The only limitation is the space that's available in the storage account. O tamanho máximo de uma mensagem individual é de 64 KB.The maximum size of an individual message is 64 KB. Se necessitar de mensagens maiores, considere utilizar filas do Azure Service Bus em alternativa.If you require messages bigger than this, then consider using Azure Service Bus queues instead.
Cada fila de armazenamento tem um nome exclusivo dentro da conta de armazenamento que a contém.Each storage queue has a unique name within the storage account that contains it. O Azure cria partições de filas baseadas no nome.Azure partitions queues based on the name. Todas as mensagens para a mesma fila são armazenadas na mesma partição, que é controlada por um único servidor.All messages for the same queue are stored in the same partition, which is controlled by a single server. Filas diferentes podem ser geridas por diferentes servidores, para o ajudar a equilibrar a carga.Different queues can be managed by different servers to help balance the load. A alocação de filas a servidores é transparente para as aplicações e os utilizadores.The allocation of queues to servers is transparent to applications and users.
Numa aplicação em grande escala, não utilize a mesma fila de armazenamento para todas as instâncias da aplicação porque esta abordagem poderá fazer com que o servidor que está a alojar a fila se torne um hotspot.In a large-scale application, don't use the same storage queue for all instances of the application because this approach might cause the server that's hosting the queue to become a hotspot. Em vez disso, utilize filas diferentes para diferentes áreas funcionais da aplicação.Instead, use different queues for different functional areas of the application. Filas de armazenamento do Azure não suportam transações, pelo que direcionar mensagens para filas diferentes deve ter pouco efeito na consistência das mensagens.Azure storage queues do not support transactions, so directing messages to different queues should have little effect on messaging consistency.
Uma fila de armazenamento do Azure pode processar até 2000 mensagens por segundo.An Azure storage queue can handle up to 2,000 messages per second. Se precisar de processar mensagens a uma taxa superior, considere criar várias filas.If you need to process messages at a greater rate than this, consider creating multiple queues. Por exemplo, numa aplicação global, crie filas de armazenamento separadas em contas de armazenamento separadas para processar instâncias de aplicações que estejam a ser executadas em cada região.For example, in a global application, create separate storage queues in separate storage accounts to handle application instances that are running in each region.
A criação de partições de barramento de serviço do AzurePartitioning Azure Service Bus
O Azure Service Bus utiliza um mediador de mensagens para processar mensagens que são enviadas para uma fila ou tópico do Service Bus.Azure Service Bus uses a message broker to handle messages that are sent to a Service Bus queue or topic. Por predefinição, todas as mensagens que são enviadas para uma fila ou um tópico são processadas pelo mesmo processo de mediador de mensagens.By default, all messages that are sent to a queue or topic are handled by the same message broker process. Esta arquitetura pode colocar uma limitação ao débito global da fila de mensagens.This architecture can place a limitation on the overall throughput of the message queue. No entanto, também pode particionar uma fila ou um tópico quando é criado.However, you can also partition a queue or topic when it is created. Para tal, defina a propriedade EnablePartitioning da descrição da fila ou do tópico para true.You do this by setting the EnablePartitioning property of the queue or topic description to true.
Uma fila ou um tópico particionado está dividido em vários fragmentos, cada um dos quais tem por base um armazenamento de mensagens e um mediador de mensagens separados.A partitioned queue or topic is divided into multiple fragments, each of which is backed by a separate message store and message broker. O Service Bus assume a responsabilidade por criar e gerir estes fragmentos.Service Bus takes responsibility for creating and managing these fragments. Quando uma aplicação publica uma mensagem numa fila ou num tópico particionado, o Service Bus atribui a mensagem a um fragmento para essa fila ou tópico.When an application posts a message to a partitioned queue or topic, Service Bus assigns the message to a fragment for that queue or topic. Quando uma aplicação recebe uma mensagem de uma fila ou subscrição, o Service Bus verifica cada fragmento para obter a mensagem seguinte disponível e, em seguida, passa-a à aplicação para processamento.When an application receives a message from a queue or subscription, Service Bus checks each fragment for the next available message and then passes it to the application for processing.
Esta estrutura ajuda a distribuir a carga por mediadores de mensagens e arquivos de mensagens, aumentando a escalabilidade e melhorando a disponibilidade.This structure helps distribute the load across message brokers and message stores, increasing scalability and improving availability. Se o mediador de mensagens ou o arquivo de mensagens para um fragmento estiver temporariamente indisponível, o Service Bus pode obter as mensagens de um dos restantes fragmentos disponíveis.If the message broker or message store for one fragment is temporarily unavailable, Service Bus can retrieve messages from one of the remaining available fragments.
O Service Bus atribui uma mensagem a um fragmento da seguinte forma:Service Bus assigns a message to a fragment as follows:
Se a mensagem pertencer a uma sessão, todas as mensagens com o mesmo valor para o SessionId propriedade são enviados para o mesmo fragmento.If the message belongs to a session, all messages with the same value for the SessionId property are sent to the same fragment.
Se a mensagem não pertencer a uma sessão, mas o remetente tiver especificado um valor para a propriedade PartitionKey, então todas as mensagens com o mesmo valor PartitionKey são enviadas para o mesmo fragmento.If the message does not belong to a session, but the sender has specified a value for the PartitionKey property, then all messages with the same PartitionKey value are sent to the same fragment.
Se as propriedades SessionId e PartitionKey estiverem ambas especificadas, têm de ser definidas para o mesmo valor ou a mensagem será rejeitada.If the SessionId and PartitionKey properties are both specified, then they must be set to the same value or the message will be rejected.
Se as propriedades SessionId e PartitionKey de uma mensagem não forem especificadas, mas a deteção de duplicados estiver ativada, a propriedade MessageId irá ser utilizada.If the SessionId and PartitionKey properties for a message are not specified, but duplicate detection is enabled, the MessageId property will be used. Todas as mensagens com o mesmo MessageId serão direcionadas para o mesmo fragmento.All messages with the same MessageId will be directed to the same fragment.
Se as mensagens não incluírem uma propriedade SessionId, PartitionKey ou MessageId, o Service Bus atribui mensagens a fragmentos sequencialmente.If messages do not include a SessionId, PartitionKey, or MessageId property, then Service Bus assigns messages to fragments sequentially. Se um fragmento não estiver disponível, o Service Bus irá avançar para o seguinte.If a fragment is unavailable, Service Bus will move on to the next. Isto significa que uma falha temporária na infraestrutura de mensagens não irá causar a falha da operação de envio de mensagens.This means that a temporary fault in the messaging infrastructure does not cause the message-send operation to fail.
Considere os seguintes pontos ao decidir se ou como particionar uma fila ou um tópico de mensagens do Service Bus:Consider the following points when deciding if or how to partition a Service Bus message queue or topic:
As filas e os tópicos do Service Bus são criados no âmbito de um espaço de nomes do Service Bus.Service Bus queues and topics are created within the scope of a Service Bus namespace. Atualmente, o Service Bus permite até 100 filas ou tópicos particionados por espaço de nomes.Service Bus currently allows up to 100 partitioned queues or topics per namespace.
Cada espaço de nomes do Service Bus impõe quotas dos recursos disponíveis, como o número de subscrições por tópico, o número de pedidos simultâneos de envio e receção por segundo, e o número máximo de ligações simultâneas que podem ser estabelecidas.Each Service Bus namespace imposes quotas on the available resources, such as the number of subscriptions per topic, the number of concurrent send and receive requests per second, and the maximum number of concurrent connections that can be established. Estas quotas estão documentadas na quotas do Service Bus.These quotas are documented in Service Bus quotas. Se prevê exceder estes valores, crie espaços de nomes adicionais com as suas próprias filas e tópicos, e distribua o trabalho por estes espaços de nomes.If you expect to exceed these values, then create additional namespaces with their own queues and topics, and spread the work across these namespaces. Por exemplo, numa aplicação global, crie espaços de nomes separados em cada região e configure as instâncias da aplicação para que utilizem as filas e os tópicos no espaço de nomes mais próximo.For example, in a global application, create separate namespaces in each region and configure application instances to use the queues and topics in the nearest namespace.
As mensagens que são enviadas como parte de uma transação têm de especificar uma chave de partição.Messages that are sent as part of a transaction must specify a partition key. Pode ser uma propriedade SessionId, PartitionKey ou MessageId.This can be a SessionId, PartitionKey, or MessageId property. Todas as mensagens que são enviadas como parte da mesma transação têm de especificar a mesma chave de partição porque têm de ser processadas pelo mesmo processo de mediador de mensagens.All messages that are sent as part of the same transaction must specify the same partition key because they must be handled by the same message broker process. Não é possível enviar mensagens para filas ou tópicos diferentes na mesma transação.You cannot send messages to different queues or topics within the same transaction.
As filas e os tópicos particionados não podem ser configurados para serem eliminados automaticamente quando ficam inativos.Partitioned queues and topics can't be configured to be automatically deleted when they become idle.
Atualmente, as filas e os tópicos particionados não podem ser utilizados com o Advance Message Queueing Protocol (AMQP) se estiver a criar soluções entre plataformas ou híbridas.Partitioned queues and topics can't currently be used with the Advanced Message Queuing Protocol (AMQP) if you are building cross-platform or hybrid solutions.
A criação de partições de Cosmos DBPartitioning Cosmos DB
O Azure Cosmos DB é uma base de dados NoSQL que pode armazenar documentos JSON com a API SQL do Azure Cosmos DB.Azure Cosmos DB is a NoSQL database that can store JSON documents using the Azure Cosmos DB SQL API. Um documento numa base de dados do Cosmos DB é uma representação JSON serializada de um objeto ou outro conjunto de dados.A document in a Cosmos DB database is a JSON-serialized representation of an object or other piece of data. Não são impostos esquemas fixos, exceto que cada documento tem de conter um ID exclusivo.No fixed schemas are enforced except that every document must contain a unique ID.
Os documentos são organizados em coleções.Documents are organized into collections. Pode agrupar documentos relacionados numa coleção.You can group related documents together in a collection. Por exemplo, num sistema de que mantém publicações de blogue, pode armazenar o conteúdo de cada mensagem de blogue como um documento numa coleção.For example, in a system that maintains blog postings, you can store the contents of each blog post as a document in a collection. Também pode criar coleções para cada tipo de assunto.You can also create collections for each subject type. Em alternativa, numa aplicação multi-inquilino, como num sistema onde autores diferentes controlam e gerem as suas próprias publicações no blogue, pode particionar blogues por autor e criar coleções separadas para cada autor.Alternatively, in a multitenant application, such as a system where different authors control and manage their own blog posts, you can partition blogs by author and create separate collections for each author. O espaço de armazenamento que é atribuído às coleções é elástico e pode aumentar ou diminuir conforme necessário.The storage space that's allocated to collections is elastic and can shrink or grow as needed.
O Cosmos DB suporta a criação automática de partições de dados com base numa chave de partição definida pela aplicação.Cosmos DB supports automatic partitioning of data based on an application-defined partition key. Uma partição lógica é uma partição que armazena todos os dados para um valor de chave de partição única.A logical partition is a partition that stores all the data for a single partition key value. Todos os documentos que partilham o mesmo valor da chave de partição são colocados na mesma partição lógica.All documents that share the same value for the partition key are placed within the same logical partition. O Cosmos DB distribui valores de acordo com o hash da chave de partição.Cosmos DB distributes values according to hash of the partition key. Uma partição lógica tem um tamanho máximo de 10 GB.A logical partition has a maximum size of 10 GB. Por conseguinte, a escolha da chave de partição é uma decisão importante no momento da conceção.Therefore, the choice of the partition key is an important decision at design time. Escolha uma propriedade com uma vasta gama de valores e padrões de acesso uniformes.Choose a property with a wide range of values and even access patterns. Para obter mais informações, veja Particionar e dimensionar no Azure Cosmos DB.For more information, see Partition and scale in Azure Cosmos DB.
Cada base de dados do Cosmos DB tem um nível de desempenho que determina a quantidade de recursos que obtém.Each Cosmos DB database has a performance level that determines the amount of resources it gets. Um nível de desempenho está associado a um limite de taxa de unidade de pedido (RU).A performance level is associated with a request unit (RU) rate limit. O limite de taxa de RU especifica o volume dos recursos que estão reservados e disponíveis para utilização exclusiva por essa coleção.The RU rate limit specifies the volume of resources that's reserved and available for exclusive use by that collection. O custo de uma coleção depende do nível de desempenho que está selecionado para essa coleção.The cost of a collection depends on the performance level that's selected for that collection. Quanto maior for o nível de desempenho (e o limite de taxa de RU), maior será o encargo.The higher the performance level (and RU rate limit) the higher the charge. Pode ajustar o nível de desempenho de uma coleção com o portal do Azure.You can adjust the performance level of a collection by using the Azure portal. Para obter mais informações, veja Unidades de Pedido no Azure Cosmos DB.For more information, see Request Units in Azure Cosmos DB.
Se o mecanismo de particionamento do Cosmos DB fornece não for suficiente, poderá ter de dividir os dados ao nível da aplicação.If the partitioning mechanism that Cosmos DB provides is not sufficient, you may need to shard the data at the application level. As coleções de documentos fornecem um mecanismo natural para criação de partições de dados dentro de uma base de dados.Document collections provide a natural mechanism for partitioning data within a single database. A forma mais simples de implementar a divisão consiste em criar uma coleção para cada partição horizontal.The simplest way to implement sharding is to create a collection for each shard. Os contentores são recursos lógicos e podem abranger um ou mais servidores.Containers are logical resources and can span one or more servers. Os contentores de tamanho fixo têm um limite máximo de 10 GB e débito de 10 000 de RU/s.Fixed-size containers have a maximum limit of 10 GB and 10,000 RU/s throughput. Os contentores ilimitados não têm um tamanho máximo de armazenamento, mas tem de especificar uma chave de partição.Unlimited containers do not have a maximum storage size, but must specify a partition key. Com a fragmentação da aplicação, a aplicação cliente tem de direcionar os pedidos para a partição horizontal adequada, normalmente, implementando o seu próprio mecanismo de mapeamento, com base em alguns atributos dos dados que definem a chave de partição horizontal.With application sharding, the client application must direct requests to the appropriate shard, usually by implementing its own mapping mechanism based on some attributes of the data that define the shard key.
Todas as bases de dados são criadas no contexto de uma conta de base de dados do Cosmos DB.All databases are created in the context of a Cosmos DB database account. Uma única conta pode conter várias bases de dados e especifica em que regiões são criadas as bases de dados.A single account can contain several databases, and it specifies in which regions the databases are created. Cada conta também impõe o seu próprio controlo de acesso.Each account also enforces its own access control. Pode utilizar contas do Cosmos DB para localizar geograficamente partições horizontais (coleções dentro de bases de dados) próximas dos utilizadores que precisam de lhes aceder e impor restrições para que apenas esses utilizadores lhes possam ligar.You can use Cosmos DB accounts to geo-locate shards (collections within databases) close to the users who need to access them, and enforce restrictions so that only those users can connect to them.
Ao decidir como particionar os dados com a API SQL do Cosmos DB, considere os seguintes pontos:Consider the following points when deciding how to partition data with the Cosmos DB SQL API:
Os recursos disponíveis para uma base de dados do Cosmos DB estão sujeitos às limitações de quota da conta.The resources available to a Cosmos DB database are subject to the quota limitations of the account. Cada base de dados pode conter várias coleções, e cada coleção está associada a um nível de desempenho que regula o limite de taxa de RU (débito reservado) para essa coleção.Each database can hold a number of collections, and each collection is associated with a performance level that governs the RU rate limit (reserved throughput) for that collection. Para obter mais informações, veja Subscrição do Azure e limites de serviço, quotas e restrições.For more information, see Azure subscription and service limits, quotas, and constraints.
Cada documento tem de ter um atributo que possa ser utilizado para identificar exclusivamente esse documento dentro da coleção em que é mantido.Each document must have an attribute that can be used to uniquely identify that document within the collection in which it is held. Este atributo é diferente da chave de partição horizontal, que define qual coleção contém o documento.This attribute is different from the shard key, which defines which collection holds the document. Uma coleção pode conter um grande número de documentos.A collection can contain a large number of documents. Em teoria, está limitada apenas pelo comprimento máximo do ID do documento.In theory, it's limited only by the maximum length of the document ID. O ID do documento pode ter até 255 carateres.The document ID can be up to 255 characters.
Todas as operações em relação a um documento são executadas no contexto de uma transação. As transações estão confinadas à coleção na qual o documento está contido.All operations against a document are performed within the context of a transaction. Transactions are scoped to the collection in which the document is contained. Se uma operação falhar, o trabalho que foi efetuado é revertido.If an operation fails, the work that it has performed is rolled back. Enquanto um documento está sujeito a uma operação, quaisquer alterações efetuadas estão sujeitas ao isolamento a nível de instantâneo.While a document is subject to an operation, any changes that are made are subject to snapshot-level isolation. Este mecanismo garante que se, por exemplo, um pedido para criar um novo documento falhar, outro utilizador que esteja a consultar a base de dados em simultâneo não irá ver um documento parcial que é então removido.This mechanism guarantees that if, for example, a request to create a new document fails, another user who's querying the database simultaneously will not see a partial document that is then removed.
As consultas de base de dados também estão confinadas ao nível da coleção.Database queries are also scoped to the collection level. Uma consulta única só pode obter dados de uma coleção.A single query can retrieve data from only one collection. Se precisar de obter dados de várias coleções, tem de consultar individualmente cada coleção e unir os resultados no código da aplicação.If you need to retrieve data from multiple collections, you must query each collection individually and merge the results in your application code.
O Cosmos DB suporta itens programáveis que podem todos ser armazenados numa coleção juntamente com documentos.Cosmos DB supports programmable items that can all be stored in a collection alongside documents. Estes incluem os procedimentos armazenados, as funções definidas pelo utilizador e os acionadores (escritos em JavaScript).These include stored procedures, user-defined functions, and triggers (written in JavaScript). Estes itens podem aceder a qualquer documento dentro da mesma coleção.These items can access any document within the same collection. Além disso, estes itens são executados no âmbito da transação de ambiente (no caso de um acionador que é acionado em resultado de uma operação de criação, eliminação ou substituição efetuada num documento) ou ao iniciar uma nova transação (no caso de um procedimento armazenado que é executado em resultado de um pedido explícito de um cliente).Furthermore, these items run either inside the scope of the ambient transaction (in the case of a trigger that fires as the result of a create, delete, or replace operation performed against a document), or by starting a new transaction (in the case of a stored procedure that is run as the result of an explicit client request). Se o código de um item programável emitir uma exceção, a transação é revertida.If the code in a programmable item throws an exception, the transaction is rolled back. Pode utilizar os procedimentos armazenados e os acionadores para manter a integridade e consistência entre documentos, mas estes documentos têm todos de constar da mesma coleção.You can use stored procedures and triggers to maintain integrity and consistency between documents, but these documents must all be part of the same collection.
As coleções que pretende manter nas bases de dados não devem exceder os limites de débito definidos pelos níveis de desempenho das coleções.The collections that you intend to hold in the databases should be unlikely to exceed the throughput limits defined by the performance levels of the collections. Para obter mais informações, veja Unidades de Pedido no Azure Cosmos DB.For more information, see Request Units in Azure Cosmos DB. Se prevê atingir estes limites, considere a divisão das coleções entre bases de dados em contas diferentes para reduzir a carga por coleção.If you anticipate reaching these limits, consider splitting collections across databases in different accounts to reduce the load per collection.
A criação de partições de pesquisa do AzurePartitioning Azure Search
A capacidade de pesquisar dados é, muitas vezes, o método principal de navegação e exploração que é fornecido por muitas aplicações Web.The ability to search for data is often the primary method of navigation and exploration that's provided by many web applications. Ajuda os utilizadores a localizar recursos rapidamente (por exemplo, os produtos numa aplicação de comércio eletrónico) com base nas combinações de critérios de pesquisa.It helps users find resources quickly (for example, products in an e-commerce application) based on combinations of search criteria. O serviço Azure Search fornece capacidades de pesquisa em texto completo relativamente a conteúdo Web e inclui funcionalidades como escrita antecipada, consultas sugeridas com base em correspondências próximas e navegação por facetas.The Azure Search service provides full-text search capabilities over web content, and includes features such as type-ahead, suggested queries based on near matches, and faceted navigation. Para obter mais informações, consulte o que é o Azure Search?.For more information, see What is Azure Search?.
O Azure Search armazena conteúdo pesquisável como documentos JSON numa base de dados.Azure Search stores searchable content as JSON documents in a database. Pode definir índices que especificam os campos pesquisáveis nestes documentos e fornecem estas definições ao Azure Search.You define indexes that specify the searchable fields in these documents and provide these definitions to Azure Search. Quando um utilizador submete um pedido de pesquisa, o Azure Search utiliza os índices adequados para localizar itens correspondentes.When a user submits a search request, Azure Search uses the appropriate indexes to find matching items.
Para reduzir a contenção, o armazenamento que é utilizado pelo Azure Search pode ser dividido em 1, 2, 3, 4, 6 ou 12 partições, e cada partição pode ser replicada até 6 vezes.To reduce contention, the storage that's used by Azure Search can be divided into 1, 2, 3, 4, 6, or 12 partitions, and each partition can be replicated up to 6 times. O resultado do número de partições, multiplicado pelo número de réplicas é denominado a unidade de pesquisa (SU).The product of the number of partitions multiplied by the number of replicas is called the search unit (SU). Uma única instância do Azure Search pode conter um máximo de 36 SUs (uma base de dados com 12 partições só suporta, no máximo, 3 réplicas).A single instance of Azure Search can contain a maximum of 36 SUs (a database with 12 partitions only supports a maximum of 3 replicas).
É-lhe faturada cada SU atribuída ao seu serviço.You are billed for each SU that is allocated to your service. À medida que o volume pesquisável cresce ou que a taxa de pedidos de pesquisa aumenta, pode adicionar SUs a uma instância existente do Azure Search para processar a carga adicional.As the volume of searchable content increases or the rate of search requests grows, you can add SUs to an existing instance of Azure Search to handle the extra load. O próprio Azure Search distribui equitativamente os documentos pelas partições.Azure Search itself distributes the documents evenly across the partitions. Atualmente, não são suportadas estratégias manuais de criação de partições.No manual partitioning strategies are currently supported.
Cada partição pode conter, no máximo, 15 milhões de documentos ou ocupar 300 GB de espaço de armazenamento (o que for mais pequeno).Each partition can contain a maximum of 15 million documents or occupy 300 GB of storage space (whichever is smaller). Pode criar até 50 índices.You can create up to 50 indexes. O desempenho do serviço varia e depende da complexidade dos documentos, dos índices disponíveis e dos efeitos da latência de rede.The performance of the service varies and depends on the complexity of the documents, the available indexes, and the effects of network latency. Em média, uma única réplica (1 SU) deve ser capaz de lidar com 15 consultas por segundo (QPS), embora seja recomendável efetuar testes de referência com os seus dados para obter uma medida de débito mais precisa.On average, a single replica (1 SU) should be able to handle 15 queries per second (QPS), although we recommend performing benchmarking with your own data to obtain a more precise measure of throughput. Para obter mais informações, consulte limites de serviço do Azure Search.For more information, see Service limits in Azure Search.
Pode armazenar um conjunto limitado de tipos de dados em documentos pesquisáveis, incluindo cadeias, booleanos, dados numéricos, dados de data e hora e alguns dados geográficos.You can store a limited set of data types in searchable documents, including strings, Booleans, numeric data, datetime data, and some geographical data. Para obter mais informações, consulte a página Tipos de Dados Suportados (Azure Search) no site da Microsoft.For more information, see the page Supported data types (Azure Search) on the Microsoft website.
Tem controlo limitado sobre a forma como o Azure Search particiona os dados para cada instância do serviço.You have limited control over how Azure Search partitions data for each instance of the service. No entanto, num ambiente global, poderá melhorar o desempenho e reduzir ainda mais a latência e a contenção através da criação de partições do próprio serviço, com qualquer uma das seguintes estratégias:However, in a global environment you might be able to improve performance and reduce latency and contention further by partitioning the service itself using either of the following strategies:
Criar uma instância do Azure Search em cada região geográfica e certifique-se de que as aplicações cliente são direcionadas para a instância disponível mais próxima.Create an instance of Azure Search in each geographic region, and ensure that client applications are directed toward the nearest available instance. Esta estratégia requer que todas as atualizações ao conteúdo pesquisável sejam replicadas atempadamente em todas as instâncias do serviço.This strategy requires that any updates to searchable content are replicated in a timely manner across all instances of the service.
Crie duas camadas do Azure Search:Create two tiers of Azure Search:
Um serviço local em cada região que contém os dados que são acedidos mais frequentemente por utilizadores nessa região.A local service in each region that contains the data that's most frequently accessed by users in that region. Os utilizadores podem direcionar os pedidos aqui para obterem resultados rápidos, embora limitados.Users can direct requests here for fast but limited results.
Um serviço global que abrange todos os dados.A global service that encompasses all the data. Os utilizadores podem direcionar os pedidos aqui para obterem resultados mais lentos mas mais completos.Users can direct requests here for slower but more complete results.
Esta abordagem é mais adequada quando há uma variação regional significativa dos dados que estão a ser pesquisados.This approach is most suitable when there is a significant regional variation in the data that's being searched.
A criação de partições de Cache de Redis do AzurePartitioning Azure Redis Cache
A Cache de Redis do Azure fornece um serviço de colocação em cache partilhado na cloud que é baseado no arquivo de dados de chave-valor de Redis.Azure Redis Cache provides a shared caching service in the cloud that's based on the Redis key-value data store. Como o nome indica, a Cache de Redis do Azure foi concebida como uma solução de colocação em cache.As its name implies, Azure Redis Cache is intended as a caching solution. Utilize-a apenas para conter dados transitórios e não como um arquivo de dados permanente.Use it only for holding transient data and not as a permanent data store. Aplicações que utilizam a Cache de Redis do Azure devem poder continuar a funcionar se a cache não estiver disponível.Applications that use Azure Redis Cache should be able to continue functioning if the cache is unavailable. A Cache de Redis do Azure suporta a replicação primária/secundária para fornecer elevada disponibilidade, mas atualmente limita o tamanho máximo da cache a 53 GB.Azure Redis Cache supports primary/secondary replication to provide high availability, but currently limits the maximum cache size to 53 GB. Se precisar de mais espaço, tem de criar caches adicionais.If you need more space than this, you must create additional caches. Para obter mais informações, consulte Cache de Redis do Azure.For more information, see Azure Redis Cache.
A criação de partições de um arquivo de dados de Redis envolve a divisão os dados entre instâncias do serviço de Redis.Partitioning a Redis data store involves splitting the data across instances of the Redis service. Cada instância constitui uma única partição.Each instance constitutes a single partition. A Cache de Redis do Azure recolhe os serviços de Redis por trás de uma fachada e não os expõe diretamente.Azure Redis Cache abstracts the Redis services behind a façade and does not expose them directly. A forma mais simples de implementar a criação de partições é criar várias instâncias de Cache de Redis do Azure e distribuir os dados por elas.The simplest way to implement partitioning is to create multiple Azure Redis Cache instances and spread the data across them.
Pode associar cada item de dados a um identificador (uma chave de partição) que especifica qual cache armazena o item de dados.You can associate each data item with an identifier (a partition key) that specifies which cache stores the data item. A lógica de aplicação de cliente pode então utilizar este identificador para encaminhar pedidos para a partição adequada.The client application logic can then use this identifier to route requests to the appropriate partition. Este esquema é muito simples, mas se o esquema de partição for alterado (por exemplo, se forem criadas instâncias adicionais da Cache de Redis do Azure), as aplicações cliente poderão ter de ser reconfiguradas.This scheme is very simple, but if the partitioning scheme changes (for example, if additional Azure Redis Cache instances are created), client applications might need to be reconfigured.
O Redis nativo (não a Cache de Redis do Azure) suporta a criação de partições do lado do servidor com base no clustering de Redis.Native Redis (not Azure Redis Cache) supports server-side partitioning based on Redis clustering. Nesta abordagem, pode dividir os dados uniformemente por servidores, utilizando um mecanismo de hash.In this approach, you can divide the data evenly across servers by using a hashing mechanism. Cada servidor Redis armazena os metadados que descrevem o intervalo de chaves hash que a partição contém, e também contém informações sobre as chaves hash que estão localizadas em partições noutros servidores.Each Redis server stores metadata that describes the range of hash keys that the partition holds, and also contains information about which hash keys are located in the partitions on other servers.
As aplicações cliente simplesmente enviam pedidos para qualquer um dos servidores de Redis participantes (provavelmente o mais próximo).Client applications simply send requests to any of the participating Redis servers (probably the closest one). O servidor Redis examina o pedido de cliente.The Redis server examines the client request. Se puder ser resolvido localmente, efetua a operação pedida.If it can be resolved locally, it performs the requested operation. Caso contrário, reencaminha o pedido para o servidor adequado.Otherwise it forwards the request on to the appropriate server.
Este modelo é implementado com o clustering de Redis e está descrito com maior detalhe na página Tutorial do cluster Redis no site do Redis.This model is implemented by using Redis clustering, and is described in more detail on the Redis cluster tutorial page on the Redis website. O clustering de Redis é transparente para as aplicações cliente.Redis clustering is transparent to client applications. Podem ser adicionados servidores Redis adicionais ao cluster (e os dados podem ser divididos novamente) sem necessidade de reconfigurar os clientes.Additional Redis servers can be added to the cluster (and the data can be repartitioned) without requiring that you reconfigure the clients.
A Cache de Redis do Azure atualmente suporta Redis clustering no premium apenas da camada.Azure Redis Cache currently supports Redis clustering in premium tier only.
A página Criação de partições: como dividir dados entre várias instâncias de Redis no site do Redis fornece mais informações sobre a implementação da criação de partições com o Redis.The page Partitioning: how to split data among multiple Redis instances on the Redis website provides more information about implementing partitioning with Redis. O resto desta secção parte do princípio que está a implementar a criação de partições do lado do cliente ou assistida por proxy.The remainder of this section assumes that you are implementing client-side or proxy-assisted partitioning.
Ao decidir como particionar os dados com a Cache de Redis do Azure, considere os seguintes pontos:Consider the following points when deciding how to partition data with Azure Redis Cache:
A Cache de Redis do Azure não se destina a agir como um arquivo de dados permanente, pelo que, seja qual for o esquema de partições que implementar, o código da aplicação tem de conseguir obter dados de uma localização que não a cache.Azure Redis Cache is not intended to act as a permanent data store, so whatever partitioning scheme you implement, your application code must be able to retrieve data from a location that's not the cache.
Os dados que são frequentemente acedidos em conjunto devem ser mantidos na mesma partição.Data that is frequently accessed together should be kept in the same partition. O Redis é um arquivo de chave-valor poderoso que fornece vários mecanismos altamente otimizados para estruturar dados.Redis is a powerful key-value store that provides several highly optimized mechanisms for structuring data. Estes mecanismos podem ser um dos seguintes:These mechanisms can be one of the following:
Cadeias simples (dados binários com comprimento até 512 MB)Simple strings (binary data up to 512 MB in length)
Tipos agregados, como listas (que podem atuar como filas e pilhas)Aggregate types such as lists (which can act as queues and stacks)
Conjuntos (ordenados e não ordenados)Sets (ordered and unordered)
Hashes (que podem agrupar os campos relacionados, como os itens que representam os campos num objeto)Hashes (which can group related fields together, such as the items that represent the fields in an object)
Os tipos de agregados permitem associar muitos valores relacionados à mesma chave.The aggregate types enable you to associate many related values with the same key. Uma chave de Redis identifica uma lista, conjunto, ou hash, em vez dos itens de dados nela contidos.A Redis key identifies a list, set, or hash rather than the data items that it contains. Estes tipos estão disponíveis com a Cache de Redis do Azure e são descritos na página Tipos de dados no site do Redis.These types are all available with Azure Redis Cache and are described by the Data types page on the Redis website. Por exemplo, numa parte de um sistema de comércio eletrónico que controla as encomendas que são feitas pelos clientes, os detalhes de cada cliente podem ser armazenados num hash de Redis que é codificado com o ID de cliente.For example, in part of an e-commerce system that tracks the orders that are placed by customers, the details of each customer can be stored in a Redis hash that is keyed by using the customer ID. Cada hash pode conter uma coleção de IDs de encomendas para o cliente.Each hash can hold a collection of order IDs for the customer. Um conjunto Redis separado pode conter as encomendas, novamente estruturadas como hashes e codificadas com o ID de encomenda.A separate Redis set can hold the orders, again structured as hashes, and keyed by using the order ID. A Figura 8 mostra esta estrutura.Figure 8 shows this structure. Tenha em atenção que o Redis não implementa qualquer outra forma de integridade referencial, pelo que é responsabilidade do programador manter as relações entre os clientes e as encomendas.Note that Redis does not implement any form of referential integrity, so it is the developer's responsibility to maintain the relationships between customers and orders.
Figura 8. Estrutura sugerida no armazenamento do Redis para gravar as encomendas de cliente e os respetivos detalhes.Figure 8. Suggested structure in Redis storage for recording customer orders and their details.
No Redis, todas as chaves são valores de dados binários (por exemplo, cadeias de Redis) e podem conter até 512 MB de dados.In Redis, all keys are binary data values (like Redis strings) and can contain up to 512 MB of data. Em teoria, uma chave pode conter quase quaisquer informações.In theory, a key can contain almost any information. No entanto, recomendamos que adote uma convenção de nomenclatura consistente de chaves, que seja descritiva do tipo de dados e que identifique a entidade, mas não seja excessivamente longa.However, we recommend adopting a consistent naming convention for keys that is descriptive of the type of data and that identifies the entity, but is not excessively long. Uma abordagem comum é utilizar chaves com o formato "entity_type:ID".A common approach is to use keys of the form "entity_type:ID". Por exemplo, pode utilizar "customer:99" para indicar a chave de um cliente com o ID 99.For example, you can use "customer:99" to indicate the key for a customer with the ID 99.
Pode implementar a criação de partições verticais armazenando informações relacionadas em agregações diferentes da mesma base de dados.You can implement vertical partitioning by storing related information in different aggregations in the same database. Por exemplo, numa aplicação de comércio eletrónico, pode armazenar as informações frequentemente acedidas sobre os produtos num hash de Redis e as informações detalhadas utilizadas menos frequentemente noutro.For example, in an e-commerce application, you can store commonly accessed information about products in one Redis hash and less frequently used detailed information in another. Ambos os hashes podem utilizar o mesmo ID de produto como parte da chave.Both hashes can use the same product ID as part of the key. Por exemplo, pode utilizar "product: nn" (em que nn é o ID de produto) para obter as informações de produto e "product_details: nn" para os dados detalhados.For example, you can use "product: nn" (where nn is the product ID) for the product information and "product_details: nn" for the detailed data. Esta estratégia pode ajudar a reduzir o volume de dados com maior probabilidade de serem obtidos pela maioria das consultas.This strategy can help reduce the volume of data that most queries are likely to retrieve.
Pode criar novas partições de um arquivo de dados de Redis, mas tenha em atenção que se trata de uma tarefa complexa e demorada.You can repartition a Redis data store, but keep in mind that it's a complex and time-consuming task. O clustering de Redis pode criar novas partições dos dados automaticamente, mas esta capacidade não está disponível com a Cache de Redis do Azure.Redis clustering can repartition data automatically, but this capability is not available with Azure Redis Cache. Por conseguinte, ao estruturar o esquema de partição, tente deixar espaço livre suficiente em cada partição para permitir o crescimento esperado dos dados ao longo do tempo.Therefore, when you design your partitioning scheme, try to leave sufficient free space in each partition to allow for expected data growth over time. No entanto, lembre-se de que a Cache de Redis do Azure destina-se a colocar dados em cache temporariamente e que os dados mantidos na cache podem ter uma duração limitada especificada como um valor TTL (time-to-live).However, remember that Azure Redis Cache is intended to cache data temporarily, and that data held in the cache can have a limited lifetime specified as a time-to-live (TTL) value. Para dados relativamente voláteis, o valor de TTL pode ser pequeno, mas para dados estáticos, o valor de TTL pode ser muito mais longo.For relatively volatile data, the TTL can be short, but for static data the TTL can be a lot longer. Evite armazenar grandes quantidades de dados de longa duração na cache, se houver probabilidade de o volume destes dados encherem a cache.Avoid storing large amounts of long-lived data in the cache if the volume of this data is likely to fill the cache. Pode especificar uma política de expulsão que faz com que a Cache de Redis do Azure remova os dados se o espaço for premium.You can specify an eviction policy that causes Azure Redis Cache to remove data if space is at a premium.
Quando utilizar a cache de Redis do Azure, especifique o tamanho máximo da cache (de 250 MB a 53 GB), ao selecionar o escalão de preço adequado.When you use Azure Redis cache, you specify the maximum size of the cache (from 250 MB to 53 GB) by selecting the appropriate pricing tier. No entanto, depois de ter sido criada uma Cache de Redis do Azure, não é possível aumentar (nem diminuir) o respetivo tamanho.However, after an Azure Redis Cache has been created, you cannot increase (or decrease) its size.
Os lotes de Redis e as transações não podem abranger várias ligações, pelo que todos os dados que são afetados por um lote ou transação devem ser mantidos na mesma base de dados (partição horizontal).Redis batches and transactions cannot span multiple connections, so all data that is affected by a batch or transaction should be held in the same database (shard).
Uma sequência de operações numa transação de Redis não é necessariamente atómica.A sequence of operations in a Redis transaction is not necessarily atomic. Os comandos que compõem uma transação são verificados e colocados em fila antes de ser executados.The commands that compose a transaction are verified and queued before they run. Se ocorrer um erro durante esta fase, a fila completa é eliminada.If an error occurs during this phase, the entire queue is discarded. No entanto, depois de a transação ser submetida com êxito, os comandos em fila são executados em sequência.However, after the transaction has been successfully submitted, the queued commands run in sequence. Se um comando falhar, apenas esse comando deixa de ser executado.If any command fails, only that command stops running. Todos os comandos anteriores e posteriores na fila são executados.All previous and subsequent commands in the queue are performed. Para obter mais informações, aceda à página Transações no site do Redis.For more information, go to the Transactions page on the Redis website.
O Redis suporta um número limitado de operações atómicas.Redis supports a limited number of atomic operations. As únicas operações deste tipo que suportam várias chaves e valores são operações MGET e MSET.The only operations of this type that support multiple keys and values are MGET and MSET operations. As operações MGET devolvem uma coleção de valores para uma lista de chaves especificada, e as operações MSET armazenam uma coleção de valores para uma lista de chaves especificada.MGET operations return a collection of values for a specified list of keys, and MSET operations store a collection of values for a specified list of keys. Se precisar de utilizar estas operações, os pares chave-valor que são referenciados pelos comandos MSET e MGET têm de ser armazenados na mesma base de dados.If you need to use these operations, the key-value pairs that are referenced by the MSET and MGET commands must be stored within the same database.
A criação de partições de recursos de infraestrutura do serviço do AzurePartitioning Azure Service Fabric
O Azure Service Fabric é uma plataforma de microsserviços que fornece um runtime para aplicações distribuídas na cloud.Azure Service Fabric is a microservices platform that provides a runtime for distributed applications in the cloud. O Service Fabric suporta executáveis de convidado .Net, serviços com e sem estado, e contentores.Service Fabric supports .Net guest executables, stateful and stateless services, and containers. Os serviços com estado fornecem uma coleção fiável para armazenar persistentemente dados de uma coleção de chave-valor dentro do cluster do Service Fabric.Stateful services provide a reliable collection to persistently store data in a key-value collection within the Service Fabric cluster. Para obter mais informações sobre as estratégias para chaves de criação de partições numa coleção fiável, consulte orientações e recomendações para coleções fiáveis no Azure Service Fabric.For more information about strategies for partitioning keys in a reliable collection, see guidelines and recommendations for reliable collections in Azure Service Fabric.
Descrição geral do Azure Service Fabric é uma introdução ao Azure Service Fabric.Overview of Azure Service Fabric is an introduction to Azure Service Fabric.
Serviços de partição fiáveis do Service Fabric fornece mais informações sobre serviços fiáveis no Azure Service Fabric.Partition Service Fabric reliable services provides more information about reliable services in Azure Service Fabric.
Criação de partições dos Hubs de eventos do AzurePartitioning Azure Event Hubs
Os [Hubs de Eventos do Azure] event-hubs foram concebidos para transmissão em fluxo de dados em grande escala e a criação de partições está incorporada no serviço para permitir o dimensionamento horizontal.Azure Event Hubs is designed for data streaming at massive scale, and partitioning is built into the service to enable horizontal scaling. Cada consumidor só lê uma partição específica do fluxo de mensagens.Each consumer only reads a specific partition of the message stream.
O publicador de eventos apenas tem conhecimento da respetiva chave de partição, não da partição onde os eventos são publicados.The event publisher is only aware of its partition key, not the partition to which the events are published. Este desacoplamento da chave e da partição faz com que o remetente não tenha necessidade de saber muito sobre o processamento a jusante.This decoupling of key and partition insulates the sender from needing to know too much about the downstream processing. (Também é possível enviar eventos diretamente para uma determinada partição, mas geralmente tal não é recomendado.)(It's also possible send events directly to a given partition, but generally that's not recommended.)
Considere o dimensionamento a longo prazo ao selecionar a contagem de partições.Consider long-term scale when you select the partition count. Depois de um hub de eventos ser criado, não é possível alterar o número de partições.After an event hub is created, you can't change the number of partitions.
Para obter mais informações sobre como utilizar partições em Hubs de Eventos, veja O que são os Hubs de Eventos?.For more information about using partitions in Event Hubs, see What is Event Hubs?.
Para considerações sobre compromissos entre a disponibilidade e a consistência, veja Disponibilidade e consistência em Hubs de Eventos.For considerations about trade-offs between availability and consistency, see Availability and consistency in Event Hubs.