Estratégia de armazenamento de dados
O estado atual da tecnologia de computadores é que é possível armazenar quantidades quase infinitas de dados. Como conseqüência disso, a necessidade de excluir dados para liberar espaço para novos é praticamente eliminada.
Isso oferece muitas vantagens, começando pela relação natural de dados e objetos que eles descrevem, uma vez que existem leis de conservação na natureza, o mesmo deve se aplicar aos dados que refletem objetos naturais e terminando com a exceção de problemas puramente tecnológicos relacionados à integridade de dados em hora.
Assim, a estratégia de armazenamento deve basear-se no paradigma de exclusão "soft", que consiste em marcar os dados como perdendo sua relevância a partir de um certo ponto no tempo.
Exatamente o mesmo se aplica às alterações de dados. As atualizações não devem substituir os dados anteriores, mas indicam que, a partir de um determinado momento, os dados têm significados diferentes.
Se você realmente deseja liberar espaço limpando os armazenamentos de dados não utilizados, pode aplicar a estratégia de compactar os armazenamentos, fazendo uma cópia dele substituindo apenas os dados relevantes em algum momento no passado.
Essas considerações não são novas, pois já foram implementadas em grandes data warehouses como o Hadoop.
Formato de armazenamento de dados
Os dados que refletem certas entidades, como regra, são um conjunto de atributos cuja composição reflete as características necessárias da entidade. Por simplicidade, assumimos que estamos falando de um modelo relacional que consiste em tuplas.
Assim, os dados são armazenados na forma de tuplas de um determinado tipo, que com o tempo podem mudar e perder relevância.
Também queremos dizer que os armazenamentos modernos de big data geralmente têm uma estrutura de valor-chave com um índice primário na chave e possíveis índices opcionais em outros atributos.
Dadas essas considerações, o seguinte formato de armazenamento de dados é proposto.
Gostaria de observar imediatamente que esse formato não é exclusivo, mas inspirado na estrutura de armazenamento de dados nos objetos 1C sob o nome "Register". Mas, neste desenvolvimento, propõe-se tornar o formato universal e armazenar todos os dados nele.
Portanto, propomos um formato para registrar dados sobre entidades e seus atributos, com base no conceito de um fluxo de trabalho com base nas seguintes definições:
- Uma operação é uma mudança atômica em uma entidade de dados.
- Uma entidade consiste em atributos.
- Uma entidade tem um tipo que determina a composição de seus atributos.
- Entidades do mesmo tipo são armazenadas em um único encadeamento.
- Fluxo de trabalho - um objeto de armazenamento da tabela de tipos onde estão localizadas operações relacionadas a entidades do mesmo tipo e alteração de estado.
Assim, cada operação consiste em um cabeçalho de operação e um conjunto de atributos que dependem do tipo de entidade:
- OpID - identificador exclusivo da operação
- OpTS - registro de data e hora da operação
- OpType - tipo de operação
- OpClass - nome do fluxo
- OpUser - usuário do sistema que emitiu o comando
- OpDoc - documento de operação, ou seja, o documento que o criou pode não estar instalado
- OpComment - comentário da operação
- ID - identificador da entidade à qual a operação se refere
- Parâmetros - atributos de operação dependentes do fluxo
OpIDs e IDs podem ser qualquer coisa, mas, por enquanto, pode fazer sentido usar um UID.
O OpTS provavelmente deve ser do tipo carimbo de data e hora, mas complementado por um índice ordinal, se várias operações caírem no mesmo período para garantir uma ordem única de operações.
O OpType pode ser de qualquer tipo, por exemplo, um / vários caracteres ou um número.
OpClass, OpUser e OpComment podem ser uma string ou alguma referência a um diretório.
O OpDoc fornece um link para o documento, mas pode estar ausente. Esta é uma conexão com o nível superior.
As operações são divididas em básica e de serviço.
Operações básicas
Operações básicas 3 - adicionar, atualizar, excluir:
- A operação "A" add - afirma a instanciação de uma nova entidade de um determinado tipo e define um conjunto de atributos.
- Operação "U" atualização - detecta uma alteração em uma entidade de um determinado tipo e define novos valores para um conjunto específico de atributos.
- Exclusão da operação "D" - indica o fim da realidade de uma entidade de um determinado tipo.
As operações A e U podem definir não todos os atributos, mas apenas alguns. Esses atributos que não são definidos por esta operação podem ter um valor do tipo NULL ou algum outro valor especial, que no momento ainda não está disponível, mas seria bom criar.
Como resultado, o valor real dos atributos da entidade em um momento específico requer seu cálculo pesquisando novamente, selecionando todos os atributos que diferem do valor especial (não definido).
Ao emitir a operação U, o sistema deve verificar a presença da operação A para esta entidade e, se estiver ausente, alterar o tipo de operação para A.
A operação D fecha a existência de uma determinada entidade e, ao solicitar valores de atributo para essa entidade com um ponto de relevância após esta operação, os valores “não definidos” devem ser retornados para todos os atributos dessa entidade. Ao emitir a operação D, o sistema deve verificar a presença da operação A para esta entidade e, se estiver ausente, recusar salvar o comando D.
Como um recurso adicional, essa estrutura de operações permite organizar o armazenamento de uma entidade com o mesmo ID com atributos diferentes em diferentes momentos, não apenas com base em atributos, mas também em toda a entidade. Ou seja, podemos ter vários blocos AN * UD nos quais a entidade existe e entre D e A ela não existe.
Operações de Serviço
As operações de serviço podem ser muitas e sua composição pode ser reabastecida. Como exemplo, várias considerações podem ser feitas:
- A operação "N" é uma operação inválida - essa operação deve ser ignorada pelo sistema. Você pode alterar outros tipos de operações para N para excluí-los do trabalho.
- Cache "C" da operação - essa operação pode ser criada com uma certa frequência e armazenar valores de atributos em um momento específico, a fim de reduzir em profundidade o custo da pesquisa de valores de atributos. Detalhes dos parâmetros de operação podem ser armazenados, por exemplo, em um comentário ou no próprio código de operação. Obviamente, ao aplicar operações básicas, as operações do tipo C devem ser recalculadas ou substituídas por N.
- Operação Operações do grupo "S" - essa operação pode ser criada com uma certa frequência e armazenar valores do grupo (por exemplo, somas, médias etc.) de atributos de tipos numéricos por um determinado período. Detalhes dos parâmetros de operação podem ser armazenados, por exemplo, em um comentário ou no próprio código de operação. Obviamente, ao aplicar operações básicas, as operações do tipo S devem ser recalculadas ou substituídas por N.
- Atributos do grupo "G" da operação - essa operação pode ser semelhante a U, mas, ao mesmo tempo, determinados comandos do sistema emitirão não um valor do (s) atributo (s), mas vários. Um valor de atributo por operação A / U, os valores restantes - na operação G, localizados entre A / U adjacente.
As operações de serviço são opcionais, mas podem fornecer serviços adicionais ao sistema de armazenamento e melhorar seu desempenho. Sua composição pode ser diferente para diferentes sistemas.