Artigo
· Jun. 3 3min de leitura

Como configurar armazenamento em coluna nas classes

 

Armazenamento em coluna é um dos mais novos oferecimentos do InterSystems IRIS. Diferente do armazenamento tradicional baseado em linhas, ele otimiza o processamento das queries ao guardados os dados em colunas ao invés de linhas, permitindo acesso mais rápido e retorno de informações relevantes.

Alguns artigos já foram escritos a respeito de quando ele deve ser usado para dar o melhor impulso ao sistema, como criar tabelas dessa maneira usando SQL.

CREATE TABLE table (column1 type1, column2 type2, column3 type3) WITH STORAGETYPE = COLUMNAR  -- ex 1
CREATE TABLE table (column1 type1, column2 type2, column3 type3 WITH STORAGETYPE = COLUMNAR)  -- ex 2

e até testes de performance.

Como tudo o que sabemos, o InterSystems IRIS é uma DBMS (DataBase Management System - sistema de gerencialmento de base de dados) multi-modelo e dá acesso descomplicado ao mesmo registro usando acesso relacional e por objeto. Então a primeira parte está coberta por outros artigos, mas e a última?

É bom saber que o layout do armazenamento em coluna também pode ser definido em classes e há muitas maneiras de fazer isso.

1. Se você deseja definir o armazenamento para todas as propriedades como colunar (exemplo 1 no topo), apenas adicione o parâmetro a seguir à sua classe:

Parameter STORAGEDEFAULT = "columnar" 

E se considerarmos um exemplo acima, teremos a seguinte classe:

Class Post.Address Extends %Persistent [Final]
{
Parameter STORAGEDEFAULT = "columnar";
Parameter USEEXTENTSET=1;
Property City As %String(MAXLEN = 12);
Property ZIP As %String(MAXLEN = 9);
Property Country As %String(MAXLEN = 12);
}

Parameter STORAGEDEFAULT = "columnar" diz ao sistema que todos os dados devem ser armazendos por colunas (significando que cada coluna terá sua própria global).

Parameter USEEXTENTSET = 1 diz ao sistema para gerar globais com hash mais eficientes, com nomes mais curtos.

Você pode declarar qualquer coluna como colunar. No entanto, tabelas que usam o layout padrão de armazenamento devem especificar as palavras chave de classe Final ou NoExtent, com qualquer subuclasse imediata definida explicitamente com Final. Se não fizer isso, receberá um erro durante a compilação.

2. Você também pode definir apenas algumas propriedades como armazenadas por colunas (exemplo 2 no topo). Para isso, você deve definir o parâmetro STORAGEDEFAULT = "columnar" para uma propriedade.

Class Post.Address Extends %Persistent
{
Parameter STORAGEDEFAULT = "row";
Parameter USEEXTENTSET=1;
Property City As %String(MAXLEN = 12);
Property ZIP As %String(MAXLEN = 9);
Property Country As %String(MAXLEN = 12, STORAGEDEFAULT = "columnar");
}

Dessa maneira, cidades e CEPs (ZIPs) serão armazenados como o usual em uma global ^Post.AddressD e Countries (Países) serão armazenados em uma global separada como coluna.

No caso deste exemplo, essa seria uma abordagem muito melhor, porque se temos uma base de dados de diferentes cidades em diferentes países, o número de países é limitado enquanto o número de cidades não é muito. Além disso, não há muitos casos em que você precisará fazer consultas analíticas em cidades, diferente dos países.

Espero que isso lhe ajude a entender como trabalhar com armazenamento colunar em classes. Há algumas limitações que você deve manter em mente, então por favor, leia mais do assunto aqui.

Discussão (1)2
Entre ou crie uma conta para continuar