Produtos secos 丨 Tutorial de partição de banco de dados de série temporal (1)

1. Por que particionar os dados?

O particionamento do banco de dados pode reduzir significativamente o atraso na resposta do sistema, ao mesmo tempo que aumenta o rendimento dos dados. Especificamente, o particionamento tem os seguintes benefícios:

  • O particionamento torna grandes tabelas mais fáceis de gerenciar. As operações de manutenção em subconjuntos de dados também são mais eficientes, porque essas operações são apenas para os dados necessários, e não para a tabela inteira. Uma boa estratégia de particionamento reduzirá a quantidade de dados a serem verificados, lendo apenas os dados relevantes necessários para satisfazer a consulta. Quando todos os dados estão na mesma partição, consultas, cálculos e outras operações no banco de dados serão restritas ao gargalo de E / S de acesso ao disco.
  • O particionamento permite que o sistema faça uso total de todos os recursos. Com um bom esquema de particionamento e computação paralela, a computação distribuída pode fazer uso completo de todos os nós para concluir tarefas que geralmente são concluídas em um nó. Quando uma tarefa pode ser dividida em várias subtarefas dispersas e cada subtarefa acessa uma partição diferente, a eficiência pode ser melhorada.
  • O particionamento aumenta a disponibilidade do sistema. Porque a cópia da partição geralmente é armazenada em nós físicos diferentes. Portanto, quando uma partição está indisponível, o sistema ainda pode chamar outras partições de réplica para garantir a operação normal do trabalho.

2. Método de partição

DolphinDB suporta uma variedade de métodos de particionamento: partição de intervalo (RANGE), partição de hash (HASH), partição de valor (VALUE), partição de lista (LIST), partição composta (COMPO).

  • O particionamento de intervalo cria uma partição para cada intervalo, que é o método de particionamento mais comumente usado e recomendado. Você pode colocar todos os registros cujos valores estão em um intervalo em uma partição.
  • O particionamento de hash usa funções de hash para operar em colunas de partição para facilitar o estabelecimento de um número especificado de partições.
  • A partição de valor cria uma partição para cada valor, como data de negociação de ações e mês de negociação de ações.
  • O particionamento de lista é baseado em listas enumeradas pelo usuário, que é mais flexível do que o particionamento de valor.
  • O particionamento composto é adequado para grandes quantidades de dados e as consultas geralmente envolvem duas ou mais colunas de partição. Cada seleção de partição pode usar partição de intervalo, valor ou lista. Por exemplo, divida o valor pela data da transação de estoque e divida o intervalo por código de estoque.

Podemos usar a função de banco de dados para criar um banco de dados.

语法 :banco de dados (diretório, [partitionType], [partitionScheme], [locations])

parâmetro

diretório: o diretório onde o banco de dados é salvo. O DolphinDB tem três tipos de bancos de dados, que são banco de dados na memória, banco de dados em disco e banco de dados em sistema de arquivos distribuído. Para criar um banco de dados na memória, o diretório está vazio; para criar um banco de dados local, o diretório deve ser um diretório do sistema de arquivos local; para criar um banco de dados em um sistema de arquivos distribuído, o diretório deve começar com "dfs: //". Este tutorial usa a criação de um banco de dados local do Windows como exemplo.

partitionType: modo de partição, existem 5 modos: partição de intervalo (RANGE), partição de hash (HASH), partição de valor (VALUE), partição de lista (LIST), partição composta (COMPO).

partitionScheme: esquema de partição. Os esquemas de partição correspondentes a vários métodos de particionamento são os seguintes:

6c5af97e99111771a9edb241ee11a46e.png

localizações: especifique a localização do nó onde cada partição está localizada. Se for um banco de dados do sistema de arquivos distribuído ou um banco de dados do tipo partição composta (COMPO), o parâmetro de locais não pode ser usado.


2.1 partição de intervalo

A partição do intervalo é determinada pelo vetor de partição. O vetor de partição representa o intervalo, incluindo o valor inicial, mas não o valor final.

No exemplo a seguir, o banco de dados db possui duas partições: [0,5) e [5,10). Use a função append! Para salvar a tabela t como a tabela de partição pt no banco de dados db e use o ID como a coluna de partição.

n = 1000000 
ID = rand (10, n) 
x = rand (1.0, n) 
t = tabela (ID, x) 
db = banco de dados ("dfs: // rangedb", RANGE, 0 5 10) 

pt = db.createPartitionedTable (t, `pt,` ID) 
pt.append! (t); 

pt = loadTable (db, `pt) 
selecione a contagem (x) de pt

6f925802b778e71f0fa201f30f78c09f.png


2.2 Partição de hash

A partição hash usa uma função hash na coluna da partição para gerar partições. O particionamento hash é uma maneira fácil de gerar um número específico de partições. Mas deve-se notar que a partição hash não pode garantir o mesmo tamanho da partição, especialmente quando a distribuição do valor da coluna da partição é distorcida. Além disso, ao procurar dados em uma área contínua na coluna de partição, a eficiência da partição hash é menor do que a da partição de área ou partição de valor.

No exemplo a seguir, o banco de dados db tem duas partições. Use a função append! Para salvar a tabela t como a tabela de partição pt no banco de dados db e use o ID como a coluna de partição.

n = 1000000 
ID = rand (10, n) 
x = rand (1,0, n) 
t = tabela (ID, x) 
db = banco de dados ("dfs: // hashdb", HASH, [INT, 2]) 

pt = db .createPartitionedTable (t, `pt,` ID) 
pt.append! (t); 

pt = loadTable (db, `pt) 
selecione a contagem (x) de pt

80270b36bebb1d2446f19e6625f66688.png

2.3 partição de valor

A partição de valor usa um valor para representar uma partição. O exemplo a seguir define 204 partições. Cada zona representa um mês entre janeiro de 2000 e dezembro de 2016.

n = 1000000 
mês = take (2000.01M..2016.12M, n) 
x = rand (1.0, n) 
t = table (month, x) 

db = database ("dfs: // valuedb", VALUE, 2.000.01M .. 2016,12M) 

pt = db.createPartitionedTable (t, `pt,` mês) 
pt.append! (T) 

pt = loadTable (db, `pt) 
selecione contagem (x) de pt

67865bbac45ea112b87e52dd4a342346.png


2.4 Lista de partição

Na partição LIST, usamos uma lista contendo vários elementos para representar uma partição. O exemplo a seguir tem duas partições, a primeira partição contém 3 códigos de estoque e a segunda partição contém 2 códigos de estoque.

n = 1000000 
ticker = rand (`MSFT`GOOG`FB`ORCL`IBM, n); 
x = rand (1.0, n) 
t = table (ticker, x) 

db = database ("dfs: // listdb", LIST, [`IBM`ORCL`MSFT,` GOOG`FB]) 
pt = db.createPartitionedTable ( t, `pt,` ticker) 
pt.append! (t) 

pt = loadTable (db, `pt) 
selecione contagem (x) de pt

09c0318879b18f933acc9801ba2d936f.png


2.5 Partição combinada

A partição de combinação (COMPO) pode definir 2 ou 3 colunas de partição. Cada coluna pode ser particionada independentemente por intervalo (RANGE), valor (VALUE) ou lista (LIST). As várias colunas da partição combinada são logicamente paralelas e não há subordinação ou relacionamento de prioridade.

n = 1000000 
ID = rand (100, n) 
datas = 2017.08.07..2017.08.11 
data = rand (datas, n) 
x = rand (10,0, n) 
t = tabela (ID, data, x) 

dbDate = banco de dados (, VALUE, 2017.08.07..2017.08.11) 
dbID = database (, RANGE, 0 50 100) 
db = database ("dfs: // compoDB", COMPO, [dbDate, dbID]) 
pt = db.createPartitionedTable ( t, `pt,` date`ID) 
pt.append! (t) 

pt = loadTable (db, `pt) 
selecione contagem (x) de pt

O exemplo acima cria 5 partições de valor.

0d76d97408efc2a4705b89e79eb44f5a.png

Na partição 20170807, existem 2 partições de intervalo.

b22745d6c82ab7fec6b3765c168e49af.png


O tutorial de particionamento de banco de dados (2) irá introduzir os princípios de particionamento de banco de dados e esquemas de particionamento especiais

Acho que você gosta

Origin blog.51cto.com/15022783/2562523
Recomendado
Clasificación