blendb issueshttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues2019-01-10T11:07:08Zhttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/88Migrar testes para novo banco de dados de teste2019-01-10T11:07:08ZLucas Fernandes de OliveiraMigrar testes para novo banco de dados de testeAtualmente o banco de dados de teste não possui significado, atributos como **dim:1** **met:1** estão presentes mas não agregam nenhum significado. Transferir os testes para um banco de dados de teste onde os nomes dos atributos e as rel...Atualmente o banco de dados de teste não possui significado, atributos como **dim:1** **met:1** estão presentes mas não agregam nenhum significado. Transferir os testes para um banco de dados de teste onde os nomes dos atributos e as relações entre eles, e entre as tabelas faz mais sentido.
O banco de dados deve ser um cenário "real", onde o Blendb pode ser aplicado.
A principio os testes, com isso é a semântica de um teste, não precisa ser mudada, por exemplo o teste **Consulta com mais de uma métrica** ainda deve existir, mas ao invés de testar uma consulta com as métricas 1,2 e 3 pode-se testar com média, pico e total de tráfego de rede.
O principal objetivo é manter a cobertura, mesmo com o banco novo.
Acredita-se que a maioria dos testes será mantida, mas pode ocorrer de alguns testes serem considerados desnecessário e outros novos surgirem. Afinal diversos testes são afetados pela estrutura do banco de dados.1.0Rafael DiasRafael Diashttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/87Implementação de dependecia funcional para definir escopo de métricas2018-08-22T12:43:58ZLucas Fernandes de OliveiraImplementação de dependecia funcional para definir escopo de métricasPode-se ocorrer casos em que uma métrica não pode ser dividida no conjunto de métricas fornecido. Nesse caso ocorre a replicação do valor. Anteriormente acreditava-se que esse era o comportamento desejado, mas existem casos que a respost...Pode-se ocorrer casos em que uma métrica não pode ser dividida no conjunto de métricas fornecido. Nesse caso ocorre a replicação do valor. Anteriormente acreditava-se que esse era o comportamento desejado, mas existem casos que a resposta é erronêa.
Um exemplo: Supondo que os dados de rede são coletados em nível de cidade, e uma outra métrica de inventário é coletado em nível de escola. O resultado da consulta **dados de rede por escola**, seria o seguinte: todas as escolas da mesma cidade apresentariam o mesmo valor, que é o total de tráfego da cidade.
Para evitar esse problema deve-se identificar quais dimensões podem ser utilizadas em conjunto com as métricas. Para isso basta utilizar a depêndencia funcional dos atributos.
A métrica deve possuir uma chave (conjunto de dimensões) e todas as dimensões são dependentes funcionais dessa chave (podem ser inferidas a partir da chave) são as dimensões que podem ser utilizadas em conjunto com a métrica.
## Especificação
* Na definição das dimensões (arquivo de configuração), deve existir um novo campo: uma lista de dimensões que podem ser utilizadas para inferir a dimensão atual
* Se A -> C e B -> C, então em C existe uma lista com os valores [A, B]
* Métricas devem possuir uma chave
* A chave pode ser inferida da **visão origem** da métrica
* O conjunto de dimensões dessa visão pode ser utilizado como chave
* Deve-se adicionar a verficação de unicidade da métrica e da **visão origem** da métrica
* As métricas devem conter uma lista de dimensões permitidas, para serrem utilizadas em conjunto
* Essa lista pode ser calculada na leitura do arquivo de configuração
* Basta criar um grafo com as informações de dependencia funcional e calcular o fecho transitivo (realizar uma busca em largura)
* Uma vez com a lista basta verificar se a lista de dimensões é um sub-conjunto da lista de dimensões permitidas para cada uma das métricas da consulta
## Implementação
* [ ] Adicionar novo campo no arquivo de configuração para as dimensões, contendo a informação de dependencia
* [ ] Adicionar novo campo a classe das métricas, com a lista de dimensões permitidas
* [ ] Criar um grafo a partir das informações de dependência no momento da leitura do arquivo de configuração
* [ ] Calcular o conjunto de dimensões permitidas por métrica, utilizando o grafo, realizando uma busca (provavelmente em, largura)
* [ ] Modificar a API para verificar se o conjunto de dimensões é um sub-conjunto do conjunto de dimensões permitidas. Caso o conjunto seja inválido, informar o erro.1.0Lucas Fernandes de OliveiraLucas Fernandes de Oliveirahttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/85Conexão em múltiplos bancos de dados simultâneamente2018-10-03T14:53:04ZLucas Fernandes de OliveiraConexão em múltiplos bancos de dados simultâneamente# Problema
Foi detectado que para a realização da tarefa #58, é necessário se conectar em diversos bancos de dados simultâneamente. Foi detectada que essa não seria uma atualização trivial de ser realizada e terá grandes impactos em dive...# Problema
Foi detectado que para a realização da tarefa #58, é necessário se conectar em diversos bancos de dados simultâneamente. Foi detectada que essa não seria uma atualização trivial de ser realizada e terá grandes impactos em diversas partes do código, por essa razão uma tarefa separada foi criada.
Por enquanto o objetivo da tarefa é permitir a conexão a vários bancos que **compartilham o mesmo esquema**. No futuro pretende-se utilizar esquemas diferentes para cada um dos bancos, entretanto essa alteração seria muito grande e será delegada a uma outra tarefa futura.
Atualmente, conectar-se em múltiplos bancos de dados possui dois benefícios imediatos.
* Realização de testes simultâneos em SGBDs diferentes (garantindo corretude em todos os SGBD's)
* Distribuição de carga entre bases de dados (Que podem ser de SGBD's diferentes)
Além disso a inserção pode ser disparada para todos os adaptadores, mantendo a consistência da base. Ainda não é necessário decidir para qual base uma determinada inserção é enviada.
# Alterações necessárias
* [x] Modificar as variáveis de ambiente para conexão com o banco.
* Uma nova variável deve ser criada: **BLENDB_N_DATABASES** que indica o número de bancos de dados simultâneos sendo utilizados. Ela deve ter como valor *default* 1
* As variáveis **BLENDB_DB_*** devem ser modificadas para **BLENDB_DBN_** onde **DBN** será substituido por **DB0** para o primeiro banco, **DB1** para o segundo e assim sucessivamente
* A variável **BLENDB_ADAPTER** deve ser trocada para **BLENDB_DBN_ADAPTER**, já que cada banco pode ter o seu próprio adaptador
* Uma nova váriavel deve ser criada **BLENDB_SCHEMA** que contém o caminho para o esquema do banco de dados (relativo a raiz do projeto ou absoluto)
* [x] Alterações na leitura da configuração
* No **ConfigParser** trocar a criação da conexão de um objeto **Connection** para uma lista de conexões, uma para cada base.
* Realizar a leitura do arquivo de esquema a partir da váriavel de ambiente **BLENDB_SCHEMA**
* [x] Alterações na inicialização (**main.ts**)
* Remover a leitura *hardcoded* do arquivo de definição de esquema (Atualmente config.yaml ou test.yaml).
* Modificação da *middleware* de adapatdores para receber uma lista e não apenas uma conexão.
* [x] Modificação das *midlewares* de adaptador
* Unificar as *middlewares* de cada adaptador em uma única middleware que devolve uma lista de adaptadores e atribui a uma váriavel req.adapters
* [ ] Alterações nos controladores da API de leitura/escrita
* Criação de uma politica de leitura, sugestão: **round robin**, ou seja, cada nova requisição é enviada para o banco que foi o último a atender uma requisição
* Criação de uma politica de escrita, realizar a escrita em todos os bancos
* Caso 2 bancos na realidade forem o mesmo banco, a inserção será duplicada (inserções com data devem resolver)Revisionhttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/55Opção de Ordenação da API2018-03-19T14:19:05ZLucas Fernandes de OliveiraOpção de Ordenação da APIAdicionar um parâmetro de ordenação (sort) que recebe uma lista de métricas e dimensões da consulta para realizar a ordenaçãoAdicionar um parâmetro de ordenação (sort) que recebe uma lista de métricas e dimensões da consulta para realizar a ordenaçãoLucas Fernandes de OliveiraLucas Fernandes de Oliveirahttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/46Condiderar clausulas na contagem de dimensões2017-09-15T11:23:54ZLucas Fernandes de OliveiraCondiderar clausulas na contagem de dimensõesAs dimensões contidas nas clausulas também devem ser consideradas no cálculo para determinar se uma dimensão deve ser removida nesse momento ou não, também deve-se realizar a propagação das clausulas durante o processo de contrução das v...As dimensões contidas nas clausulas também devem ser consideradas no cálculo para determinar se uma dimensão deve ser removida nesse momento ou não, também deve-se realizar a propagação das clausulas durante o processo de contrução das views. Assim que uma view tem todas as dimensões contidas em uam clausula, a clausula deve ser aplicada e removida do conjunto de clausula restantes.Lucas Fernandes de OliveiraLucas Fernandes de Oliveirahttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/38BUG: Filtros não relacionados devem ser relacionados2017-08-18T13:13:47ZLucas Fernandes de OliveiraBUG: Filtros não relacionados devem ser relacionadosAtualmente os filtros não relacionados são excluidos da consulta, agora eles devem ser incluidos nos vertices a serem cobertosAtualmente os filtros não relacionados são excluidos da consulta, agora eles devem ser incluidos nos vertices a serem cobertosLucas Fernandes de OliveiraLucas Fernandes de Oliveirahttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/29Atualizar Adaptador do Postgres - Geração de consultas2017-08-08T18:36:33ZLucas Fernandes de OliveiraAtualizar Adaptador do Postgres - Geração de consultasBásicamente no BlenDB uma consulta é representada como uma view.
A API faz o tradução dos atributos e transforma em um objeto do tipo Query.
Esse objeto do tipo Query é enviado a Engine que transforma em um Objeto do tipo View.
Uma vi...Básicamente no BlenDB uma consulta é representada como uma view.
A API faz o tradução dos atributos e transforma em um objeto do tipo Query.
Esse objeto do tipo Query é enviado a Engine que transforma em um Objeto do tipo View.
Uma view contém informações sobre quais dados estão disponiveis através dela (métricas e dimenções) e contém um conjunto de views filhas, que serão usadas como fonte de dados, a menos que a view seja materializada.
O algoritmo de geração de consultas recebe uma view e traduz em uma string SQL que é aceita pelo postgres. Isso é feito através de um processo recursivo, gerando as consultas das views filhas e então as usando como fonte (Tabelas) de dados.
Acredito que é possivel ao invés de gerar consultas para as views filhas e depois as utilizar como fonte de dados é possivel apenas identificar os pontos de interesse daquela view e propagar esses dados para "cima". Acredito que isso pode deixar a consulta mais eficiente além de facilitar manutenções e alterações.
A proposta dessa tarefa é encontrar a fonte real dos dados e subir essa informação e realizar apenas uma camada de JOINS apenas com as tabelas reais/materializadas.Lucas Fernandes de OliveiraLucas Fernandes de Oliveirahttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/27BUG: função de agregação count não funciona como esperado2017-08-04T11:27:06ZLucas Fernandes de OliveiraBUG: função de agregação count não funciona como esperadoAs função de agregação podem ser aplicadas diversas vezes sobre um mesmo dado. Isso normalmente não é um problema para somas e medias pois a soma das somas é a soma e a media das médias é a media, entretanto a contagem da contagem não é...As função de agregação podem ser aplicadas diversas vezes sobre um mesmo dado. Isso normalmente não é um problema para somas e medias pois a soma das somas é a soma e a media das médias é a media, entretanto a contagem da contagem não é a contagem total, o resultado é possivelmente bem menor. O resultado correto seria apenas na view de origem realizar a contagem e nas camadas superiores realizar a soma.
Lembrando que não basta realizar COUNT se a view for materializada e SUM caso contrario, pois uma view materializada não é necessáriamente a origem daquele dado.
Esse erro deve se limitar a mecher no adaptador (gerador de consulta)Lucas Fernandes de OliveiraLucas Fernandes de Oliveirahttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/21Atualizar Modulos e dependencias2017-07-04T17:36:55ZLucas Fernandes de OliveiraAtualizar Modulos e dependenciasAo tentar realizar uma build ocorreu falha ao instalar os modulos. Foi detectado qeu ajustar a versão de alguns modulos é o suficiente para resolver o problema. Travar as versões dos modulos para continuar funcionando.Ao tentar realizar uma build ocorreu falha ao instalar os modulos. Foi detectado qeu ajustar a versão de alguns modulos é o suficiente para resolver o problema. Travar as versões dos modulos para continuar funcionando.Lucas Fernandes de OliveiraLucas Fernandes de Oliveirahttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/11Implementar sub-dimensões2017-03-23T12:52:38ZLucas Fernandes de OliveiraImplementar sub-dimensõesUma sub-dimensão é uma dimensão que se forma a partir da informação de outra dimensão. Da visão do usuário é apenas mais uma dimensão. A relação entre dimensão e sub-dimensão não é visivel pra o usuário.
A intenção de uma sub-dimensão é...Uma sub-dimensão é uma dimensão que se forma a partir da informação de outra dimensão. Da visão do usuário é apenas mais uma dimensão. A relação entre dimensão e sub-dimensão não é visivel pra o usuário.
A intenção de uma sub-dimensão é subdividir a dimensão não através de mais colunas no banco de dados mas sim por meio do gerador de consultas.
Muito útil do caso de datas.
Modificações necessárias:
- [x] Modificar a definição de dimensão
- [x] Criar os tipos de relação
- [x] Alterar o algoritmo de seleção de view para considerar sub-dimensões
- [ ] Modificar os geradores de consultas
Desafios:
* Em que momento o gerador de consulta fará a conversão e quando assumira que o valor já está formtado na view ??Lucas Fernandes de OliveiraLucas Fernandes de Oliveirahttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/10Implementar especificação de intervalo2017-08-11T14:09:48ZLucas Fernandes de OliveiraImplementar especificação de intervaloNa API existem 2 parametros begin e end-date que especifiam o intervalo da consulta que não são levados em conta na geração das views nem das consultas.
Implementar as mudanças para que passem a funcionar adequadamente.Na API existem 2 parametros begin e end-date que especifiam o intervalo da consulta que não são levados em conta na geração das views nem das consultas.
Implementar as mudanças para que passem a funcionar adequadamente.Lucas Fernandes de OliveiraLucas Fernandes de Oliveirahttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/9Implementação da Date view2017-08-08T18:36:57ZLucas Fernandes de OliveiraImplementação da Date viewÉ pouco pŕatico ter uma view para controlar data e hora como uma tabela do banco, o melhor seria adicionar as dimensões de data através do gerador de consultas (sem realmente ter dados que representam a data), estudar essa possibildiade ...É pouco pŕatico ter uma view para controlar data e hora como uma tabela do banco, o melhor seria adicionar as dimensões de data através do gerador de consultas (sem realmente ter dados que representam a data), estudar essa possibildiade de se possivel implementar.Lucas Fernandes de OliveiraLucas Fernandes de Oliveirahttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/7Criar estrutura de metadados para gerenciar views2017-03-23T12:36:32ZEduardo L. BurattiCriar estrutura de metadados para gerenciar viewsCriar estrutura de metadados para armazenar as informações das views gerenciadas pelo blendb.
As informações que devem ser armazenadas são:
1. dimensions, metrics: nome das dimensões e métricas que a view armazena
2. created_at, updated...Criar estrutura de metadados para armazenar as informações das views gerenciadas pelo blendb.
As informações que devem ser armazenadas são:
1. dimensions, metrics: nome das dimensões e métricas que a view armazena
2. created_at, updated_at, deleted_at: timestamps de criação, atualização e remoção da view
3. parents: lista com as views que geradoras desta (vazia se a view for raiz)AlphaEduardo L. BurattiEduardo L. Burattihttps://gitlab.c3sl.ufpr.br/c3sl/blendb/-/issues/6Implementar mecanismo de consulta que escolhe as views necessárias e gera uma...2017-03-23T12:52:00ZEduardo L. BurattiImplementar mecanismo de consulta que escolhe as views necessárias e gera uma consulta SQL sobre elas.No BlenDB, cada view é representada por um conjunto de metadados que guardam informações de quais dimensões e métricas cada view contém. Com base nisso, criar um algoritmo para o seguinte:
---
O **número de dimensões** de uma view ou ...No BlenDB, cada view é representada por um conjunto de metadados que guardam informações de quais dimensões e métricas cada view contém. Com base nisso, criar um algoritmo para o seguinte:
---
O **número de dimensões** de uma view ou query *x* é denotado por *D(x)*. A **distância** entre uma query *q* e uma view *v* é denotado por *d(q, v)* e é definida da seguinte maneira:
```
d(q, v) = D(q) - D(v)
```
Criar um algoritmo que dada uma query *q*, escolhe o menor conjunto de views *V* que cubra *q* e minimize *d(q, v)* para toda view *v* pertencente a *V*.
---
Gerar também uma consulta SQL que retorne os dados das views selecionadas de acordo com a query do usuário. Veja o exemplo:
```sql
SELECT a.dim_state, SUM(a.met_point_count), AVG(b.met_average_download_rate)
FROM view_a3ecb59d v1, view_8c23bb4a v2
WHERE v1.dim_state = v2.dim_state, ...
GROUP BY a.dim_state;
```
A projeção (SELECT), basicamente reflete os parâmetros da query. Só tem que cuidar de qual função de agregação usar (SUM, AVG, etc.) para as métricas, essa informação vem dos metadados das views. Na seleção (WHERE), tem que juntar as dimensões que são iguais nas views (se duas views a e b tem a dimensão dim_state, garantir que a.dim_state = b.dim_state). E no agrupamento (GROUP BY), colocar todas as dimensões da query.AlphaLucas Fernandes de OliveiraLucas Fernandes de Oliveira