Redis estruturas comum de dados interna e codificação

1, String: cru, int, embstr

2, de hash: tabela de dispersão, ziplist

3: lista: LinkedList, ziplist

4: conjunto: tabela de dispersão, IntSet

5: zset: skiplist, ziplist

 

Projetar benefícios:

1: codificação pode melhorar as estruturas de dados internas e externas e não tem efeito de comando

2: uma variedade de implementações de codificação internos podem desempenhar as suas forças em diferentes cenários, como ziplist mais para economizar memória, mas o desempenho vai cair elementos da lista por um longo tempo, então Redis será implementado de acordo com a lista de conversão de opções de configuração para o tipo de LinkedList memória

 

 

Corda

Redis usando SDS ( "Simple Cordas Dinâmico") Esta estrutura armazenados corda,

1: código define estrutura cinco SDS:

1: struct __attribute__ ((__packed__)) sdshdr5 {bandeiras de char não assinado; caractere buf []; };

2: sdshdr8

3: sdshdr16

4: sdshdr32

5: sdshdr64

2: A função principal no campo:

Len: comprimento da corda (comprimento efectivamente utilizada)

alloc: alocar o tamanho da memória

bandeiras: bandeira, representa as mais baixas três tipos, os cinco restantes não utilizados

buf: matriz de char

3: Codificação

Código int: Salvar o tipo long 64-bit inteiro assinado, a chave Redis será convertido para o tipo de armazenamento longo, tipo de codificação correspondendo a OBJ_ENCODING_INT

embstr que codifica: comprimento menor do que 44 bytes para salvar uma cadeia de caracteres (OBJ_ENCODING_EMBSTR)

Código cru: poupança de uma cadeia de comprimento maior do que 44 bytes (OBJ_ENCODING_RAW)

 

 

ziplist

1: estrutura ziplist

zlbytes: indica o número de bytes ocupados ziplist, operação de redimensionamento realizada no momento de uso

zltail: representa o deslocamento do último nó, mas também para evitar atravessando toda a lista

zllen: ziplist representa o número de nós (mais de 65.535 nós, valores de campo inválidos zllen, necessidade de atravessar para obter o número real)

zlend: identificador End representa ziplist

2: estrutura de dados do nó ziplist (resumo)

Cada lista de nós comprimido por previous_entry_length, codificação, conteúdo de três componentes (o campo não se refere à estrutura real)

previous_entry_length: o comprimento do nó anterior, para atravessar a frente pela parte de trás, de acordo com o comprimento do nó anterior, ou podem necessitar de um período de cinco bytes.

codificação: registos de dados de nó armazenado tipo e comprimento de dados.

Conteúdo: O conteúdo dos dados armazenados no nó.

ziplist um período de uso contínuo de memória para armazenar dados, a fragmentação de memória é reduzida em comparação tabela hash, e um espaço de memória do ponteiro. E quando o nó é menor, ziplist mais propensos a ser carregado para o cache da CPU.

3: vantagens ziplist

footprint de memória menos provável de ser carregado para o cache da CPU

Compact reduzir a fragmentação de memória

4: deficiências ziplist

Cadeia Update (inserção de cabeça ou operação de exclusão na cabeça, principalmente, ao salvar lista de objetos tipo de transmissão com ziplist, objetos não precisa atualizar a cabeça hash armazenado.)

Cada inserção ou modificar operação iniciada realocar têm uma maior probabilidade de causar cópias de memória, diminuindo desse modo o desempenho.

Uma vez que o custo da cópia de memória, cópia de memória correspondente aumento ocorre, porque um conjunto de dados maiores para ser copiado.

Quando ziplist demasiado item de dados sobre ele para encontrar itens de dados de desempenho específicos vai se tornar muito baixo, porque a pesquisa em necessidade ziplist a ser percorrido.

A partir da complexidade consulta torna-se O (1) O (N) (hash de quando o objecto é armazenado),

5: Configuração do ziplist

configuração redis.conf:

mistura-max-ziplist-512 entradas 

mistura-max-ziplist-valor 64

Quando o número de tipos de elementos mais pequenos do que a configuração de hash de hash-Max-ziplist-entradas (padrão de 512), ao passo que todos os valores são a configuração (padrão 64 bytes) de valor ziplist de hash-max, quando, como um ziplist de hash usa o Redis aplicação interna, uso ziplist de armazenamento mais compacto para atingir uma pluralidade de sucessivos elementos, de modo que mais excelente em termos de poupança de memória de tabela de dispersão.

Redis da razão de hash para este projeto é que quando ziplist tornar-se grande, tem as seguintes desvantagens:

 

lista de navio

1: Tabela de salto skipList

modelo de cadeia de multicamadas skipList, um nó irá atribuir um número aleatório de camadas (Nível) que aponta para o ponteiro de registo após nodos individuais ou múltiplas, unicamente necessário modificar o ponteiro inserção operação antes e depois do nó de inserção, sem a necessidade de muitos nós ajuste. Reduzindo a complexidade de tempo, uma média de O (log N), o pior caso de complexidade S (N), o seu desempenho árvore equilibrada geralmente comparável.

2: Probabilidade

Quanto maior for o número de camadas de nodos para produzir, menor a probabilidade. A análise quantitativa é a seguinte:

O número de camadas de pelo menos um nó. O nó 1 é maior do que o número de camadas de satisfazer uma distribuição de probabilidades.

camadas Nó é exatamente igual probabilidade 1-p.

A probabilidade do número de nó de camadas superiores ou iguais a 2 p, o número de camadas e o nó 2 é exactamente igual à probabilidade p (1-p).

O número de camadas é maior do que a probabilidade do nó 3 é igual a P2, o número de camadas e o nó 3 é exactamente igual à probabilidade p2 (1-p).

Nó camadas 4 iguais ou superiores ao de p3 probabilidade, e de probabilidade nó de exactamente o número de camadas 4 de P3 (1-p).

3: Comparação de skiplist e árvores balanceadas, tabelas hash

  1. e vários skiplist árvore equilibradas (por exemplo, AVL, árvores vermelho-negro, etc) elementos estão ordenados, e a tabela hash não é ordenada. Portanto, a tabela hash só pode fazer uma simples procura na chave e impróprio para pesquisa de escala. O chamado escopo da pesquisa, referindo-se aqueles que encontram todos os nós de tamanho entre os dois valores especificados.
  2. Encontrar o tempo para fazer gama, a operação árvore equilibrada é mais complicado do que skiplist. Depois de equilibrar as árvores, encontramos o pequeno valor do intervalo especificado, mas também a ordem, a fim de atravessar os outros nós continuar a não mais buscar do que um grande valor. Se você não equilibrar a árvore certa transformação, onde a pré-venda não é fácil de conseguir. E ser muito simples de encontrar o intervalo em skiplist, logo após encontrar um pequeno valor, a lista da primeira camada de percorrer vários passos podem ser alcançados.
  3. as operações de inserção e de deleção árvore equilibrados, pode conduzir a um ajustamento da sub-árvore complexidade lógica, e inserções e deleções skiplist unicamente necessário modificar o ponteiro nós adjacentes, simples e rápido.
  4. A partir da cópia do pé memória, skiplist mais flexível do que alguns de árvore equilibrada. Geralmente, cada nó compreende um ponteiro árvore 2 equilibrada (apontando para a sub-árvore para a esquerda e direita, respectivamente), enquanto que o número de apontadores skiplist cada nó contém uma média de 1 / (1-p), dependendo do tamanho do parâmetro p. Se, como Redis na realização do mesmo, tomada p = 1/4, em seguida, cada nó contém uma média de 1,33 ponteiro, árvore equilibrado do que uma vantagem.
  5. Encontrar uma chave única, skiplist e árvores são equilibradas complexidade de tempo de O (N log N), ou menos; e tabela hash mantendo ao mesmo tempo um baixo valor de probabilidade de conflitos de hash, perto de encontrar complexidade O (1) maior desempenho. Então vários Mapa ou dicionário estrutura normalmente usamos, principalmente a implementação base em tabela hash.
  6. Compare-se da dificuldade implementação do algoritmo, skiplist muito mais simples do que a árvore equilibrada.

Publicado 50 artigos originais · ganhou elogios 2 · Vistas 2293

Acho que você gosta

Origin blog.csdn.net/eafun_888/article/details/104714572
Recomendado
Clasificación