A partição de dados horizontais, verticais e funcionaisHorizontal, vertical, and functional data partitioning

Em muitas soluções em grande escala, os dados são divididos em partições que podem ser geridas e acedidas separadamente.In many large-scale solutions, data is divided into partitions that can be managed and accessed separately. Criação de partições pode melhorar a escalabilidade, reduzir a contenção e otimizar o desempenho.Partitioning can improve scalability, reduce contention, and optimize performance. Ele também pode fornecer um mecanismo para dados divisória pelo padrão de utilização.It can also provide a mechanism for dividing data by usage pattern. Por exemplo, pode arquivar dados mais antigos no armazenamento de dados mais barato.For example, you can archive older data in cheaper data storage.

No entanto, a estratégia de particionamento deve ser escolhida cuidadosamente para maximizar as vantagens, minimizando efeitos adversos.However, the partitioning strategy must be chosen carefully to maximize the benefits while minimizing adverse effects.

Nota

Neste artigo, o termo criação de partições significa o processo de dividir fisicamente os dados em arquivos de dados separados.In this article, the term partitioning means the process of physically dividing data into separate data stores. Não é igual à criação de partições de tabela do SQL Server.It is not the same as SQL Server table partitioning.

Porquê criar partições de dados?Why partition data?

  • Melhorar a escalabilidade.Improve scalability. Quando dimensiona um sistema de base de dados individual, este acabará por atingir um limite de hardware físico.When you scale up a single database system, it will eventually reach a physical hardware limit. Se dividir os dados em várias partições, cada alojada num servidor separado, pode aumentar horizontalmente o sistema quase indefinidamente.If you divide data across multiple partitions, each hosted on a separate server, you can scale out the system almost indefinitely.

  • Melhorar o desempenho.Improve performance. As operações de acesso aos dados em cada partição ocorrem através de um volume de dados mais pequeno.Data access operations on each partition take place over a smaller volume of data. Feito corretamente, a criação de partições pode tornar o sistema mais eficiente.Correctly done, partitioning can make your system more efficient. As operações que afetam mais do que uma partição podem ser executadas em paralelo.Operations that affect more than one partition can run in parallel.

  • Melhorar a segurança.Improve security. Em alguns casos, pode separar os dados confidenciais e nonsensitive em partições diferentes e aplicar controlos de segurança diferentes para os dados confidenciais.In some cases, you can separate sensitive and nonsensitive data into different partitions and apply different security controls to the sensitive data.

  • Fornecer flexibilidade operacional.Provide operational flexibility. Criação de partições oferece várias oportunidades para ajuste fino operações, maximizando a eficiência administrativa e minimizando os custos.Partitioning offers many opportunities for fine-tuning operations, maximizing administrative efficiency, and minimizing cost. Por exemplo, pode definir diferentes estratégias de gestão, monitorização, cópia de segurança e restauro, e outras tarefas administrativas, com base na importância dos dados de cada partição.For example, you can define different strategies for management, monitoring, backup and restore, and other administrative tasks based on the importance of the data in each partition.

  • Corresponder o arquivo de dados ao padrão de utilização.Match the data store to the pattern of use. A criação de partições permite que cada partição seja implementada num tipo diferente de arquivo de dados, com base no custo e nas funcionalidades incorporadas que o arquivo de dados oferece.Partitioning allows each partition to be deployed on a different type of data store, based on cost and the built-in features that data store offers. Por exemplo, dados binários grandes podem ser armazenados no armazenamento de BLOBs, enquanto os dados mais estruturados podem ser mantidos num banco de dados do documento.For example, large binary data can be stored in blob storage, while more structured data can be held in a document database. Ver escolha o arquivo de dados correto.See Choose the right data store.

  • Melhorar a disponibilidade.Improve availability. Separar os dados por vários servidores evita um ponto único de falha.Separating data across multiple servers avoids a single point of failure. Se uma instância falhar, apenas os dados nessa partição não estão disponíveis.If one instance fails, only the data in that partition is unavailable. As operações das outras partições podem continuar.Operations on other partitions can continue. Para arquivos de dados de PaaS geridos, isso é menos relevante, uma vez que estes serviços destinam-se com redundância incorporada.For managed PaaS data stores, this consideration is less relevant, because these services are designed with built-in redundancy.

Estruturar partiçõesDesigning partitions

Existem três estratégias típicas para a criação de partições de dados:There are three typical strategies for partitioning data:

  • Criação de partições horizontais (frequentemente denominado fragmentação).Horizontal partitioning (often called sharding). Nesta estratégia, cada partição é um arquivo de dados separado, mas todas as partições têm o mesmo esquema.In this strategy, each partition is a separate data store, but all partitions have the same schema. Cada partição é conhecida como uma partições horizontais e contém um subconjunto específico dos dados, como todas as encomendas de um conjunto específico de clientes.Each partition is known as a shard and holds a specific subset of the data, such as all the orders for a specific set of customers.

  • Criação de partições verticais.Vertical partitioning. Nesta estratégia, cada partição contém um subconjunto dos campos para os itens no arquivo de dados.In this strategy, each partition holds a subset of the fields for items in the data store. Os campos são divididos de acordo com o respetivo padrão de utilização.The fields are divided according to their pattern of use. Por exemplo, os campos acedidos frequentemente podem ser colocados numa partição vertical e os campos acedidos com menos frequência podem ser colocados noutra.For example, frequently accessed fields might be placed in one vertical partition and less frequently accessed fields in another.

  • Criação de partições funcionais.Functional partitioning. Nesta estratégia, os dados são agregados de acordo com a forma como são utilizados por cada contexto vinculado no sistema.In this strategy, data is aggregated according to how it is used by each bounded context in the system. Por exemplo, um sistema de comércio eletrónico pode armazenar dados de faturas numa partição e produto inventário os dados em outro.For example, an e-commerce system might store invoice data in one partition and product inventory data in another.

Essas estratégias podem ser combinadas e recomendamos que considere as três ao estruturar um esquema de particionamento.These strategies can be combined, and we recommend that you consider them all when you design a partitioning scheme. Por exemplo, pode dividir os dados em partições horizontais e, em seguida, utilizar a criação de partições verticais para subdividir os dados de cada partição horizontal.For example, you might divide data into shards and then use vertical partitioning to further subdivide the data in each shard.

Criação de partições horizontais (fragmentação)Horizontal partitioning (sharding)

Figura 1 mostra a criação de partições horizontais ou fragmentação.Figure 1 shows horizontal partitioning or sharding. Neste exemplo, os dados de inventário dos produtos estão divididos em partições horizontais com base na chave de produto.In this example, product inventory data is divided into shards based on the product key. Cada partição horizontal contém os dados para um intervalo contínuo de chaves de partição horizontal (A-G e H-Z), organizadas por ordem alfabética.Each shard holds the data for a contiguous range of shard keys (A-G and H-Z), organized alphabetically. Fragmentação se propaga a carga por mais computadores, o que reduz a contenção e melhora o desempenho.Sharding spreads the load over more computers, which reduces contention and improves performance.

Criação de partições horizontais (fragmentação) de dados com base numa chave de partição

Figura 1. Criação de partições horizontais (fragmentação) de dados com base numa chave de partição.Figure 1. Horizontally partitioning (sharding) data based on a partition key.

O fator mais importante é a escolha de uma chave de fragmentação.The most important factor is the choice of a sharding key. Pode ser difícil alterar a chave depois de o sistema estar em funcionamento.It can be difficult to change the key after the system is in operation. A chave tem de garantir que os dados são particionados para distribuir a carga de trabalho de forma mais uniforme possível entre as partições horizontais.The key must ensure that data is partitioned to spread the workload as evenly as possible across the shards.

As partições horizontais não tem de ser o mesmo tamanho.The shards don't have to be the same size. É mais importante equilibrar o número de pedidos.It's more important to balance the number of requests. Algumas partições horizontais poderão ser muito grandes, mas cada item tem um número reduzido de operações de acesso.Some shards might be very large, but each item has a low number of access operations. Outras partições horizontais poderão ser mais pequenas, mas cada item ser acedido muito mais frequentemente.Other shards might be smaller, but each item is accessed much more frequently. Também é importante certificar-se de que uma única partição horizontal não excede os limites de dimensionamento (em termos de capacidade e recursos de processamento) do arquivo de dados.It's also important to ensure that a single shard does not exceed the scale limits (in terms of capacity and processing resources) of the data store.

Evite a criação de partições "mais ativos" que podem afetar o desempenho e disponibilidade.Avoid creating "hot" partitions that can affect performance and availability. Por exemplo, usando a primeira letra do nome de um cliente faz com que uma distribuição desequilibrada, uma vez que algumas letras são mais comuns.For example, using the first letter of a customer’s name causes an unbalanced distribution, because some letters are more common. Em vez disso, utilize um hash de um identificador de cliente para distribuir dados mais uniformemente por partições.Instead, use a hash of a customer identifier to distribute data more evenly across partitions.

Escolha uma chave de fragmentação que minimiza quaisquer requisitos futuros para dividir grandes partições horizontais, unir partições horizontais pequenas em partições maiores ou alterar o esquema.Choose a sharding key that minimizes any future requirements to split large shards, coalesce small shards into larger partitions, or change the schema. Estas operações podem ser muito morosas e podem requerer que coloque uma ou mais partições horizontais offline enquanto estão a ser executadas.These operations can be very time consuming, and might require taking one or more shards offline while they are performed.

Se as partições horizontais forem replicadas, poderá ser possível manter algumas das réplicas online, enquanto outras são divididas, unidas ou reconfiguradas.If shards are replicated, it might be possible to keep some of the replicas online while others are split, merged, or reconfigured. No entanto, o sistema poderá ter de limitar as operações que podem ser executadas durante a reconfiguração.However, the system might need to limit the operations that can be performed during the reconfiguration. Por exemplo, os dados das réplicas poderão ser marcados como só de leitura para evitar inconsistências de dados.For example, the data in the replicas might be marked as read-only to prevent data inconsistences.

Para obter mais informações sobre criação de partições, horizontal, consulte [padrão de fragmentação].For more information about horizontal partitioning, see [Sharding pattern].

Criação de partições verticaisVertical partitioning

O uso mais comum para a criação de partições verticais é reduzir a e/s e custos de desempenho associados à obtenção de itens que são acedidos com frequência.The most common use for vertical partitioning is to reduce the I/O and performance costs associated with fetching items that are frequently accessed. A Figura 2 mostra um exemplo de criação de partições verticais.Figure 2 shows an example of vertical partitioning. Neste exemplo, as diferentes propriedades de um item são armazenadas em partições diferentes.In this example, different properties of an item are stored in different partitions. Uma partição contém dados que são acedidos com mais frequência, incluindo o nome do produto, descrição e preço.One partition holds data that is accessed more frequently, including product name, description, and price. Outra partição contém dados de inventário: a contagem das ações e a data da última ordenada.Another partition holds inventory data: the stock count and last-ordered date.

Criação de partições verticais de dados pelo respetivo padrão de utilização

Figura 2. Criação de partições verticais dados pelo respetivo padrão de utilização.Figure 2. Vertically partitioning data by its pattern of use.

Neste exemplo, a aplicação consulta regularmente o nome, a descrição e o preço do produto ao apresentar os detalhes do produto aos clientes.In this example, the application regularly queries the product name, description, and price when displaying the product details to customers. Contagem das ações e ordenadas data de última-são mantidos numa partição separada porque estes dois itens são frequentemente utilizadas em conjunto.Stock count and last- ordered date are held in a separate partition because these two items are commonly used together.

Outras vantagens de criação de partições verticais:Other advantages of vertical partitioning:

  • Dados relativamente movimento lento (nome do produto, descrição e preço) podem ser separados dos dados mais dinâmicos (nível do stock e data da última encomenda).Relatively slow-moving data (product name, description, and price) can be separated from the more dynamic data (stock level and last ordered date). Dados de movimento lentos são um bom candidato para uma aplicação para a cache na memória.Slow moving data is a good candidate for an application to cache in memory.

  • Dados confidenciais podem ser armazenados numa partição separada com controlos de segurança adicional.Sensitive data can be stored in a separate partition with additional security controls.

  • Criação de partições verticais pode reduzir a quantidade de acesso simultâneo, que é necessário.Vertical partitioning can reduce the amount of concurrent access that's needed.

A criação de partições verticais funciona ao nível da entidade dentro de um arquivo de dados, normalizando parcialmente uma entidade para a dividir, de um item amplo para um conjunto de itens estreitos.Vertical partitioning operates at the entity level within a data store, partially normalizing an entity to break it down from a wide item to a set of narrow items. Idealmente, é adequada aos arquivos de dados orientados para colunas, como o HBase e Cassandra.It is ideally suited for column-oriented data stores such as HBase and Cassandra. Se for pouco provável que os dados numa coleção de colunas sejam alterados, pode também considerar a utilização de arquivos de colunas no SQL Server.If the data in a collection of columns is unlikely to change, you can also consider using column stores in SQL Server.

Criação de partições funcionaisFunctional partitioning

Quando é possível identificar um contexto vinculado para cada área de negócio distintas num aplicativo, criação de partições funcionais é uma forma de melhorar o desempenho de acesso de dados e isolamento.When it's possible to identify a bounded context for each distinct business area in an application, functional partitioning is a way to improve isolation and data access performance. Outro uso comum de criação de partições funcionais é separar os dados de leitura / escrita de dados só de leitura.Another common use for functional partitioning is to separate read-write data from read-only data. A Figura 3 mostra uma descrição geral da criação de partições funcionais em que os dados de inventário estão separados dos dados de cliente.Figure 3 shows an overview of functional partitioning where inventory data is separated from customer data.

Criação de partições funcionais de dados através de contexto vinculado ou subdomínio

Figura 3. Criação de partições funcionais dados através de contexto vinculado ou subdomínio.Figure 3. Functionally partitioning data by bounded context or subdomain.

Esta estratégia de criação de partições pode ajudar a reduzir a contenção do acesso aos dados nas diferentes partes de um sistema.This partitioning strategy can help reduce data access contention across different parts of a system.

Estruturar partições para escalabilidadeDesigning partitions for scalability

É essencial considerar o tamanho e a carga de trabalho de cada partição e equilibrá-los de modo a que os dados sejam distribuídos de modo a alcançar a escalabilidade máxima.It's vital to consider size and workload for each partition and balance them so that data is distributed to achieve maximum scalability. No entanto, também tem de particionar os dados para que não excedam os limites de dimensionamento de um único arquivo de partições.However, you must also partition the data so that it does not exceed the scaling limits of a single partition store.

Ao estruturar as partições para escalabilidade, siga estes passos:Follow these steps when designing partitions for scalability:

  1. Analise a aplicação para compreender os padrões de acesso aos dados, como o tamanho do conjunto de resultados devolvido por cada consulta, a frequência de acesso, a latência inerente e os requisitos de processamento de computação do lado do servidor.Analyze the application to understand the data access patterns, such as the size of the result set returned by each query, the frequency of access, the inherent latency, and the server-side compute processing requirements. Em muitos casos, algumas entidades principais irão requerer a maioria dos recursos de processamento.In many cases, a few major entities will demand most of the processing resources.
  2. Utilize esta análise para determinar as metas de escalabilidade atuais e futuras, como o tamanho dos dados e a carga de trabalho.Use this analysis to determine the current and future scalability targets, such as data size and workload. Em seguida, distribua os dados pelas partições para ir de encontro à meta de escalabilidade.Then distribute the data across the partitions to meet the scalability target. Para a criação de partições horizontais, escolher a que chave de partição horizontal direita é importante certificar-se de distribuição é mesmo.For horizontal partitioning, choosing the right shard key is important to make sure distribution is even. Para obter mais informações, consulte [padrão de fragmentação].For more information, see the [Sharding pattern].
  3. Certifique-se de que cada partição tem recursos suficientes para processar os requisitos de escalabilidade, em termos de tamanho de dados e débito.Make sure each partition has enough resources to handle the scalability requirements, in terms of data size and throughput. Consoante o arquivo de dados, pode haver um limite na quantidade de espaço de armazenamento, capacidade de processamento ou largura de banda de rede por partição.Depending on the data store, there might be a limit on the amount of storage space, processing power, or network bandwidth per partition. Se os requisitos são prováveis de exceder estes limites, poderá ter refinar a sua estratégia de criação de partições ou dividir ainda mais, a saída de dados, possivelmente, combinando as estratégias de duas ou mais.If the requirements are likely to exceed these limits, you may need to refine your partitioning strategy or split data out further, possibly combining two or more strategies.
  4. Monitorize o sistema para verificar que os dados são distribuídos como esperado e que as partições podem processar a carga.Monitor the system to verify that data is distributed as expected and that the partitions can handle the load. A utilização real não corresponde sempre o que se prevê uma análise.Actual usage does not always match what an analysis predicts. Se assim for, poderá ser possível reequilibrar as partições, caso contrário, reestruturar algumas partes do sistema para obter o equilíbrio necessário.If so, it might be possible to rebalance the partitions, or else redesign some parts of the system to gain the required balance.

Alguns ambientes cloud alocam recursos em termos de limites de infraestrutura.Some cloud environments allocate resources in terms of infrastructure boundaries. Certifique-se de que os limites do seu limiar selecionado fornecem espaço suficiente para qualquer crescimento previsto do volume de dados, em termos de armazenamento de dados, capacidade de processamento e largura de banda.Ensure that the limits of your selected boundary provide enough room for any anticipated growth in the volume of data, in terms of data storage, processing power, and bandwidth.

Por exemplo, se utilizar o armazenamento de tabelas do Azure, existe um limite para o volume de pedidos que podem ser processados por uma única partição num determinado período de tempo.For example, if you use Azure table storage, there is a limit to the volume of requests that can be handled by a single partition in a particular period of time. (Consulte Metas de Dimensionamento e Desempenho do Armazenamento do Azure.) Uma partição horizontal ocupada pode exigir mais recursos do que uma única partição pode processar.(See Azure storage scalability and performance targets.) A busy shard might require more resources than a single partition can handle. Se assim for, a partição horizontal poderá ter de ser dividida novamente em partições para distribuir a carga.If so, the shard might need to be repartitioned to spread the load. Se o tamanho total ou o débito destas tabelas exceder a capacidade de uma conta de armazenamento, poderá ter de criar contas de armazenamento adicionais e distribuir as tabelas por estas contas.If the total size or throughput of these tables exceeds the capacity of a storage account, you might need to create additional storage accounts and spread the tables across these accounts.

Estruturar partições para desempenho de consultasDesigning partitions for query performance

Muitas vezes, o desempenho das consultas pode ser aumentado através da utilização de conjuntos de dados mais pequenos e ao executar consultas paralelas.Query performance can often be boosted by using smaller data sets and by running parallel queries. Cada partição deve conter uma pequena proporção do conjunto completo de dados.Each partition should contain a small proportion of the entire data set. Esta redução de volume pode melhorar o desempenho das consultas.This reduction in volume can improve the performance of queries. No entanto, a criação de partições não é uma alternativa para estruturar e configurar uma base de dados adequadamente.However, partitioning is not an alternative for designing and configuring a database appropriately. Por exemplo, certifique-se de que tem os índices necessários no local.For example, make sure that you have the necessary indexes in place.

Ao estruturar as partições para desempenho de consultas, siga estes passos:Follow these steps when designing partitions for query performance:

  1. Verifique os requisitos e o desempenho da aplicação:Examine the application requirements and performance:

    • Utilize requisitos comerciais para determinar as consultas críticas que tem sempre executadas rapidamente.Use business requirements to determine the critical queries that must always perform quickly.
    • Monitorize o sistema para identificar quaisquer consultas com execução lenta.Monitor the system to identify any queries that perform slowly.
    • Encontre as consultas são executadas com mais frequência.Find which queries are performed most frequently. Mesmo que uma única consulta tem um custo mínimo, o consumo de recursos cumulativa pode ser significativo.Even if a single query has a minimal cost, the cumulative resource consumption could be significant.
  2. Particione os dados que estão a causar o desempenho lento:Partition the data that is causing slow performance:

    • Limite o tamanho de cada partição de forma a que o tempo de resposta de consulta esteja dentro da meta.Limit the size of each partition so that the query response time is within target.
    • Se utilizar a criação de partições horizontais, crie a chave de partição horizontal para que o aplicativo pode facilmente selecionar a partição correta.If you use horizontal partitioning, design the shard key so that the application can easily select the right partition. Isto impede que a consulta tenha de analisar cada partição.This prevents the query from having to scan through every partition.
    • Considere a localização de uma partição.Consider the location of a partition. Se for possível, tente manter os dados nas partições que estão geograficamente próximas das aplicações e dos utilizadores que lhes acedem.If possible, try to keep data in partitions that are geographically close to the applications and users that access it.
  3. Se uma entidade tiver requisitos de débito e de desempenho de consultas, utilize a criação de partições funcionais com base nessa entidade.If an entity has throughput and query performance requirements, use functional partitioning based on that entity. Se isto não satisfazer os requisitos, aplique também a criação de partições horizontais.If this still doesn't satisfy the requirements, apply horizontal partitioning as well. Na maioria dos casos, será suficiente uma única estratégia de particionamento, mas em alguns casos é mais eficiente combinar as duas estratégias.In most cases, a single partitioning strategy will suffice, but in some cases it is more efficient to combine both strategies.

  4. Considere a execução de consultas em paralelo em partições para melhorar o desempenho.Consider running queries in parallel across partitions to improve performance.

Estruturar partições para disponibilidadeDesigning partitions for availability

A criação de partições de dados pode melhorar a disponibilidade das aplicações, garantindo que todo o conjunto de dados não constitui um ponto único de falha e que os subconjuntos individuais do conjunto de dados podem ser geridos de forma independente.Partitioning data can improve the availability of applications by ensuring that the entire dataset does not constitute a single point of failure and that individual subsets of the dataset can be managed independently.

Considere os seguintes fatores que afetam a disponibilidade:Consider the following factors that affect availability:

O quão críticos os dados são para as operações empresariais.How critical the data is to business operations. Identifique quais dados são informações críticas de negócios, como transações, e que dados são dados operacionais menos críticos, como ficheiros de registo.Identify which data is critical business information, such as transactions, and which data is less critical operational data, such as log files.

  • Considere armazenar os dados críticos em partições de elevada disponibilidade com um plano de cópia de segurança adequado.Consider storing critical data in highly available partitions with an appropriate backup plan.

  • Estabelece gestão separado e os procedimentos de monitorização para diferentes conjuntos de dados.Establish separate management and monitoring procedures for the different datasets.

  • Coloque os dados com o mesmo nível de criticidade na mesma partição, para que possa ser feita uma cópia de segurança dos mesmos em conjunto, com uma frequência adequada.Place data that has the same level of criticality in the same partition so that it can be backed up together at an appropriate frequency. Por exemplo, as partições que contêm dados de transação poderão ter a cópia de segurança com mais frequência do que das partições que contêm informações de rastreio ou de registo.For example, partitions that hold transaction data might need to be backed up more frequently than partitions that hold logging or trace information.

Como as partições individuais podem ser geridas.How individual partitions can be managed. Estruturar partições para suportar a gestão e manutenção independentes proporciona várias vantagens.Designing partitions to support independent management and maintenance provides several advantages. Por exemplo:For example:

  • Se uma partição falhar, ele pode ser recuperado independentemente sem aplicações que acedam a dados de outras partições.If a partition fails, it can be recovered independently without applications that access data in other partitions.

  • A criação de partições de dados por área geográfica permite que as tarefas de manutenção agendada ocorram fora das horas de ponta para cada localização.Partitioning data by geographical area allows scheduled maintenance tasks to occur at off-peak hours for each location. Certifique-se de que as partições não são demasiado grandes para impedir que qualquer manutenção planeada seja concluída durante este período.Ensure that partitions are not too large to prevent any planned maintenance from being completed during this period.

Se pretende replicar dados críticos em partições.Whether to replicate critical data across partitions. Esta estratégia pode melhorar a disponibilidade e desempenho, mas também pode introduzir problemas de consistência.This strategy can improve availability and performance, but can also introduce consistency issues. Demora algum tempo para sincronizar as alterações com cada réplica.It takes time to synchronize changes with every replica. Durante este período, partições diferentes irão conter valores de dados diferentes.During this period, different partitions will contain different data values.

Considerações de design de aplicaçõesApplication design considerations

Criação de partições adiciona complexidade ao design e desenvolvimento do seu sistema.Partitioning adds complexity to the design and development of your system. Considere a criação de partições como uma parte fundamental da conceção do sistema, mesmo se o sistema apenas contiver inicialmente uma só partição.Consider partitioning as a fundamental part of system design even if the system initially only contains a single partition. Se estiver a considerar a criação de partições, como um adendo, é mais desafiador porque já tem um sistema ao vivo para manter a:If you address partitioning as an afterthought, it will be more challenging because you already have a live system to maintain:

  • Lógica de acesso de dados tem de ser modificado.Data access logic will need to be modified.
  • Grandes quantidades de dados existentes poderão ter de ser migrados para o distribuir em partições.Large quantities of existing data may need to be migrated, to distribute it across partitions.
  • Os utilizadores esperam poder continuar a utilizar o sistema durante a migração.Users expect to be able to continue using the system during the migration.

Em alguns casos, a criação de partições não é considerada importante porque o conjunto de dados inicial é pequeno e pode facilmente ser processado por um único servidor.In some cases, partitioning is not considered important because the initial dataset is small and can be easily handled by a single server. Isso pode ser verdadeiro para algumas cargas de trabalho, mas muitos sistemas comerciais precisam de expandir à medida que o número de utilizadores aumenta.This might be true for some workloads, but many commercial systems need to expand as the number of users increases.

Além disso, não é apenas os arquivos de dados grandes que se beneficiar da criação de partições.Moreover, it's not only large data stores that benefit from partitioning. Por exemplo, um arquivo de dados pequeno poderá ser intensamente acedido por centenas de clientes em simultâneo.For example, a small data store might be heavily accessed by hundreds of concurrent clients. A criação de partições de dados nesta situação pode ajudar a reduzir a contenção e melhorar o débito.Partitioning the data in this situation can help to reduce contention and improve throughput.

Ao estruturar um esquema de partições de dados, considere os seguintes pontos:Consider the following points when you design a data partitioning scheme:

Minimizar as operações de acesso de dados entre partições.Minimize cross-partition data access operations. Sempre que possível, mantenha os dados para as operações de base de dados mais comuns em conjunto em cada partição para minimizar as operações de acesso de dados entre partições.Where possible, keep data for the most common database operations together in each partition to minimize cross-partition data access operations. Consultas entre partições podem ser mais morosas do que consultar dentro de uma única partição, mas otimizar as partições para um conjunto de consultas poderá afetar negativamente outros conjuntos de consultas.Querying across partitions can be more time-consuming than querying within a single partition, but optimizing partitions for one set of queries might adversely affect other sets of queries. Se tem consultas em partições, minimize o tempo de consulta ao executar consultas paralelas e agregar os resultados na aplicação.If you must query across partitions, minimize query time by running parallel queries and aggregating the results within the application. (Essa abordagem pode não ser possível em alguns casos, como quando o resultado de uma consulta é utilizado na consulta seguinte.)(This approach might not be possible in some cases, such as when the result from one query is used in the next query.)

Considere replicar os dados de referência estáticos.Consider replicating static reference data. Se consultas utilizarem dados de referência relativamente estáticos, como tabelas de códigos postais ou listas de produtos, considere replicar estes dados em todas as partições para reduzir as operações de pesquisa separadas em partições diferentes.If queries use relatively static reference data, such as postal code tables or product lists, consider replicating this data in all of the partitions to reduce separate lookup operations in different partitions. Essa abordagem também pode reduzir a probabilidade dos dados de referência se tornarem um conjunto de dados "acesso frequente", com tráfego pesado proveniente em todo o sistema.This approach can also reduce the likelihood of the reference data becoming a "hot" dataset, with heavy traffic from across the entire system. No entanto, há um custo adicional associado ao sincronizar alterações para os dados de referência.However, there is an additional cost associated with synchronizing any changes to the reference data.

Minimize as associações entre partições.Minimize cross-partition joins. Sempre que possível, minimize os requisitos de integridade referencial entre partições verticais e funcionais.Where possible, minimize requirements for referential integrity across vertical and functional partitions. Nestes esquemas, a aplicação é responsável pela manutenção da integridade referencial entre partições.In these schemes, the application is responsible for maintaining referential integrity across partitions. Consultas que associem dados entre várias partições são ineficazes porque o aplicativo, normalmente, precisa de realizar consultas consecutivas com base numa chave e, em seguida, uma chave estrangeira.Queries that join data across multiple partitions are inefficient because the application typically needs to perform consecutive queries based on a key and then a foreign key. Em vez disso, considere replicar ou anular a normalização dos dados relevantes.Instead, consider replicating or de-normalizing the relevant data. Se as associações entre partições são necessárias, executar consultas paralelas nas partições e associe os dados dentro do aplicativo.If cross-partition joins are necessary, run parallel queries over the partitions and join the data within the application.

Adote a consistência eventual.Embrace eventual consistency. Avalie se a consistência forte é, de facto, um requisito.Evaluate whether strong consistency is actually a requirement. É uma abordagem comum em sistemas distribuídos implementar a consistência eventual.A common approach in distributed systems is to implement eventual consistency. Os dados em cada partição são atualizados separadamente e a lógica da aplicação assegura que as atualizações são todas concluídas com êxito.The data in each partition is updated separately, and the application logic ensures that the updates are all completed successfully. Lida igualmente com as inconsistência que possam surgir de consultar dados enquanto uma operação eventualmente consistente está em execução.It also handles the inconsistencies that can arise from querying data while an eventually consistent operation is running.

Considere a forma como as consultas localizam a partição correta.Consider how queries locate the correct partition. Se uma consulta tiver de analisar todas as partições para localizar os dados necessários, há um impacto significativo no desempenho, mesmo quando estão em execução várias consultas paralelas.If a query must scan all partitions to locate the required data, there is a significant impact on performance, even when multiple parallel queries are running. Com a criação de partições verticais e funcionais, as consultas naturalmente podem especificar a partição.With vertical and functional partitioning, queries can naturally specify the partition. Criação de partições horizontais de por outro lado, pode tornar a localização de um item, porque cada partição horizontal tem o mesmo esquema.Horizontal partitioning, on the other hand, can make locating an item difficult, because every shard has the same schema. Uma solução típica para manter um mapa que é utilizado para procurar a localização da partição horizontal itens específicos.A typical solution to maintain a map that is used to look up the shard location for specific items. Este mapa pode ser implementado na lógica de fragmentação da aplicação ou mantido pelo arquivo de dados, se este suportar a fragmentação transparente.This map can be implemented in the sharding logic of the application, or maintained by the data store if it supports transparent sharding.

Considere reequilibrar periodicamente as partições horizontais.Consider periodically rebalancing shards. Com a criação de partições horizontais, reequilibrar as partições horizontais pode ajudar a distribuir uniformemente os dados por tamanho e carga de trabalho para minimizar hotspots, maximizar o desempenho das consultas e contornar limitações do armazenamento físico.With horizontal partitioning, rebalancing shards can help distribute the data evenly by size and by workload to minimize hotspots, maximize query performance, and work around physical storage limitations. No entanto, esta é uma tarefa complexa que requer, muitas vezes, a utilização de uma ferramenta ou processo personalizado.However, this is a complex task that often requires the use of a custom tool or process.

Replicar partições.Replicate partitions. Se replicar cada partição, proporciona proteção adicional contra falhas.If you replicate each partition, it provides additional protection against failure. Se uma única réplica falhar, consultas podem ser direcionadas para uma cópia de trabalho.If a single replica fails, queries can be directed toward a working copy.

Se atingir os limites físicos de uma estratégia de criação de partições, poderá ter de expandir a escalabilidade para um nível diferente.If you reach the physical limits of a partitioning strategy, you might need to extend the scalability to a different level. Por exemplo, se estiver a criar partições ao nível de base de dados, poderá ter de localizar ou replicar partições em várias bases de dados.For example, if partitioning is at the database level, you might need to locate or replicate partitions in multiple databases. Se a criação de partições já se encontra ao nível de base de dados e as limitações físicas forem um problema, poderá significar que tem de localizar ou replicar partições em várias contas de alojamento.If partitioning is already at the database level, and physical limitations are an issue, it might mean that you need to locate or replicate partitions in multiple hosting accounts.

Evite as transações que acedem a dados em várias partições.Avoid transactions that access data in multiple partitions. Alguns arquivos de dados implementam a consistência transacional e a integridade para operações que modificam dados, mas apenas quando os dados estão localizados numa única partição.Some data stores implement transactional consistency and integrity for operations that modify data, but only when the data is located in a single partition. Se precisar de suporte transacional entre várias partições, provavelmente terá de implementar isto como parte da sua lógica de aplicação porque a maioria dos sistemas de partição não fornecem suporte nativo.If you need transactional support across multiple partitions, you will probably need to implement this as part of your application logic because most partitioning systems do not provide native support.

Todos os arquivos de dados requerem alguma gestão operacional e monitorização da atividade.All data stores require some operational management and monitoring activity. As tarefas podem variar entre carregar dados, fazer cópias de segurança e restaurar dados, reorganizar dados e garantir que o sistema está a funcionar correta e eficientemente.The tasks can range from loading data, backing up and restoring data, reorganizing data, and ensuring that the system is performing correctly and efficiently.

Considere os seguintes fatores que afetam a gestão operacional:Consider the following factors that affect operational management:

  • Como implementar tarefas de gestão e operacionais adequadas quando os dados estão particionados.How to implement appropriate management and operational tasks when the data is partitioned. Estas tarefas podem incluir fazer cópia de segurança e restaurar, arquivar dados, monitorizar o sistema e outras tarefas administrativas.These tasks might include backup and restore, archiving data, monitoring the system, and other administrative tasks. Por exemplo, a manutenção da consistência lógica durante as operações de cópia de segurança e restauro pode ser um desafio.For example, maintaining logical consistency during backup and restore operations can be a challenge.

  • Como carregar os dados para várias partições e adicionar novos dados provenientes de outras origens.How to load the data into multiple partitions and add new data that's arriving from other sources. Algumas ferramentas e utilitários podem não suportar as operações de dados em partição horizontal, como carregar dados para a partição correta.Some tools and utilities might not support sharded data operations such as loading data into the correct partition.

  • Como arquivar e eliminar os dados regularmente.How to archive and delete the data on a regular basis. Para evitar o crescimento excessivo de partições, terá de arquivar e eliminar dados regularmente (por exemplo, mensalmente).To prevent the excessive growth of partitions, you need to archive and delete data on a regular basis (such as monthly). Poderá ser necessário transformar os dados para que correspondam a um esquema de arquivo diferente.It might be necessary to transform the data to match a different archive schema.

  • Como localizar problemas de integridade de dados.How to locate data integrity issues. Considere a execução de um processo periódico para localizar quaisquer problemas de integridade de dados, como dados de uma partição que faz referência a informações em falta noutra.Consider running a periodic process to locate any data integrity issues, such as data in one partition that references missing information in another. O processo pode tentar corrigir estes problemas automaticamente ou gerar um relatório para revisão manual.The process can either attempt to fix these issues automatically or generate a report for manual review.

Reequilibrar partiçõesRebalancing partitions

Como um sistema evolui, poderá ter de ajustar o esquema de particionamento.As a system matures, you might have to adjust the partitioning scheme. Por exemplo, partições individuais podem iniciar a obtenção de um volume desproporcional de tráfego e tornam-se frequentes, originando contenção excessiva.For example, individual partitions might start getting a disproportionate volume of traffic and become hot, leading to excessive contention. Ou pode ter subestimado o volume de dados em algumas partições, fazendo com que algumas partições de abordar os limites de capacidade.Or you might have underestimated the volume of data in some partitions, causing some partitions to approach capacity limits.

Alguns arquivos de dados, por exemplo, o Cosmos DB, podem reequilibrar automaticamente partições.Some data stores, such as Cosmos DB, can automatically rebalance partitions. Em outros casos, o reequilíbrio é uma tarefa administrativa que consiste em duas fases:In other cases, rebalancing is an administrative task that consists of two stages:

  1. Determine uma nova estratégia de particionamento.Determine a new partitioning strategy.

    • As partições tem de ser divididas (ou possivelmente combinadas)?Which partitions need to be split (or possibly combined)?
    • O que é a nova chave de partição?What is the new partition key?
  2. Migre dados de esquema de partição antigo para o novo conjunto de partições.Migrate data from the old partitioning scheme to the new set of partitions.

Consoante o arquivo de dados, poderá migrar dados entre partições enquanto estão em utilização.Depending on the data store, you might be able to migrate data between partitions while they are in use. Isso é chamado migração online.This is called online migration. Se não for possível, poderá ter de fazer a partições como indisponíveis enquanto os dados são reposicionados (migração offline).If that's not possible, you might need to make partitions unavailable while the data is relocated (offline migration).

Migração offlineOffline migration

Migração offline é normalmente mais simples, dado que reduz as possibilidades de ocorrência de contenção.Offline migration is typically simpler because it reduces the chances of contention occurring. Conceitualmente, migração offline funciona da seguinte forma:Conceptually, offline migration works as follows:

  1. Marca a partição offline.Mark the partition offline.
  2. Dividir / Unir e mover os dados para novas partições.Split-merge and move the data to the new partitions.
  3. Verificar os dados.Verify the data.
  4. Coloque as partições de novo online.Bring the new partitions online.
  5. Remova a antiga.Remove the old partition.

Opcionalmente, pode marcar uma partição como só de leitura no passo 1, para que aplicações podem continuar a ler os dados enquanto ele está a ser movido.Optionally, you can mark a partition as read-only in step 1, so that applications can still read the data while it is being moved.

Migração onlineOnline migration

Migração online é mais complexa para executar, mas é menos nociva.Online migration is more complex to perform but less disruptive. O processo é semelhante à migração offline, exceto a partição original não está marcada como offline.The process is similar to offline migration, except the original partition is not marked offline. Consoante a granularidade do processo de migração (por exemplo, o item a item versus partições horizontais por partição horizontal), o código de acesso de dados nas aplicações cliente poderá ter de processar a leitura e escrita de dados que são mantidos em duas localizações, a partição original e o novo partição.Depending on the granularity of the migration process (for example, item by item versus shard by shard), the data access code in the client applications might have to handle reading and writing data that's held in two locations, the original partition and the new partition.

Os seguintes padrões de design podem ser relevantes ao seu cenário:The following design patterns might be relevant to your scenario:

  • O padrão de fragmentação descreve algumas estratégias comuns para os dados de fragmentação.The sharding pattern describes some common strategies for sharding data.

  • O padrão de tabela de índice mostra como criar índices secundários através de dados.The index table pattern shows how to create secondary indexes over data. Uma aplicação pode rapidamente obter dados com esta abordagem, através de consultas que não façam referência à chave primária de uma coleção.An application can quickly retrieve data with this approach, by using queries that do not reference the primary key of a collection.

  • O padrão de vista materializada descreve como gerar vistas pré-preenchida que resumem os dados para suportar operações de consulta rápida.The materialized view pattern describes how to generate prepopulated views that summarize data to support fast query operations. Esta abordagem poderá ser útil num arquivo de dados particionado, se as partições que contêm os dados que estão a ser resumidos estiverem distribuídas por vários sites.This approach can be useful in a partitioned data store if the partitions that contain the data being summarized are distributed across multiple sites.

Passos SeguintesNext steps