Princípio de fragmentação do MongoDB e arquitetura detalhada

O que é fragmentação do MongoDB


A fragmentação do MongoDB refere-se a dividir o banco de dados em várias partes e distribuí-las em diferentes máquinas, para que mais dados possam ser armazenados e mais solicitações possam ser processadas sem um servidor poderoso.

A ideia básica do sharding do MongoDB é dividir a coleção em pequenos pedaços, e esses pedaços são espalhados em vários shards, sendo que cada shard é responsável apenas por uma parte do total de dados.

Para a aplicação, não é necessário saber qual shard corresponde a qual dado, ou mesmo que os dados foram sharded. Quando um aplicativo consulta dados, ele só precisa conectar um pré-roteador. Este pré-roteamento obtém os dados de destino consultando o servidor de configuração para obter o estilhaço de destino onde os dados residem.

O propósito da fragmentação do MongoDB


Aplicações de banco de dados com alto volume de dados e taxa de transferência colocarão grande pressão no desempenho da máquina autônoma. O grande volume de consultas esgotará a CPU da máquina autônoma e a grande quantidade de dados colocará uma pressão maior sobre o armazenamento da máquina autônoma, que acabará esgotando a memória do sistema. Em vez disso, mude a pressão para o disco IO.

Para resolver esses problemas, existem duas abordagens básicas: dimensionamento vertical e dimensionamento horizontal.

Expansão vertical: adicione mais recursos de CPU e armazenamento para expandir a capacidade.

Expansão horizontal: distribua o conjunto de dados em vários servidores e a expansão horizontal é sharding.

A fragmentação fornece uma maneira de lidar com alta taxa de transferência e grandes volumes de dados. O uso de shards reduz o número de solicitações que cada shard precisa processar, portanto, ao escalar horizontalmente, o cluster pode aumentar sua capacidade de armazenamento e taxa de transferência. Por exemplo, ao inserir um dado, o aplicativo só precisa acessar o shard que armazena os dados.

O uso de fragmentos reduz a quantidade de dados armazenados por fragmento. Por exemplo, se o banco de dados tiver um conjunto de dados de 1 TB e 4 fragmentos, cada fragmento poderá conter apenas 256 GB de dados. Se houver 40 estilhaços, cada estilhaço pode ter apenas 25 GB de dados.

Arquitetura de fragmentação do MongoDB


Na arquitetura de fragmentação do MongoDB, existem três funções:

  • Mongos: É o roteador citado acima, que é o módulo que trata do cliente. O próprio Mongos não possui dados e não sabe como processar esses dados, mas os obtém por meio do Config Server;

  • Config Server: servidor de configuração, todas as informações do shard node e algumas informações de configuração das funções de sharding são armazenadas no Config Server, que podem ser entendidas como metadados de dados reais;

  • Sh

ard: O local de armazenamento de dados real, armazenado em Chunk.

Mongos本身并不持久化数据,所有Shard集群的元数据都会存储到Config Server里,而用户的数据会分散存储到各个Shard。Mongos启动后,会从Config Server加载元数据,开始提供服务,将用户的请求正确路由到对应的分片上。

Shard Key


可以说,Shard Key(中文翻译成片键)是MongoDB实现分片的依仗!

MongoDB中数据的分片以集合为基本单位,集合中的数据通过Shard Key被分成多部分。其实Shard Key就是在集合中选了一个键,用该键的值作为数据拆分的依据。

举个例子,假设有个存储人员信息的文档集合,如果选择名字"name"作为Shard Key,那么第一分片可能会存放名字以 A-F 开头的文档。第二分片存 G-P 开头的文档,第三分片存Q-Z的文档。

一个好的Shard Key对分片至关重要。

有一点需要注意,一个自增的Shard Key对写入和数据均匀分布不是很友好,因为自增的Shard Key总会在一个分片上写入,后续达到某个阀值才可能会写到别的分片上。但是反过来讲,按Shard Key查询(读取)会非常高效。

Acho que você gosta

Origin blog.csdn.net/am_Linux/article/details/129677666
Recomendado
Clasificación