|
|
Nessa página segue a descrição de como foi implementada a [solução](sobre/solução) proposta pelo Blendb.Existem 3 componentes que formam a solução: API, *Engine* e *Adapter*.
|
|
|
|
|
|
## API
|
|
|
|
|
|
A API representa é a porta de entrada para o Blendb. Sua função é receber os comandos do usuário e acionar os componentes corretos para realizar aquela tarefa.
|
|
|
|
|
|
Essa API foi implementada como uma API RESTful, basicamente existem 3 rotas. Uma que descreve as métricas disponíveis, uma que descreve as dimensões disponíveis e outra para realizar consultas.
|
|
|
|
|
|
Essa API envia respostas em formato JSON ou com as informações ou com uma mensagem de erro.
|
|
|
|
|
|
Por que utilizar uma API RESTful:
|
|
|
* Esse era um formato conhecido
|
|
|
* É um formato utilizado na WEB, então outros serviços da WEB tem facilidade de se comunicar com ele
|
|
|
* A amplitude da WEB torna os dados facilmente alcançáveis, ideal para disponibilização de dados abertos.
|
|
|
* Funciona no formato de serviço, então outras aplicações podem fazer uso dele.
|
|
|
* Idealmente substituíria o serviço de banco de dados.
|
|
|
* Imaginando que o Blendb faria parte de um sistema de monitoramento, ele poderia receber dados de todo o mundo se estivesse conectado a WEB.
|
|
|
|
|
|
## *Engine*
|
|
|
A *engine* é o componente que descobre e seleciona as agregações que serão utilizadas na consulta. Esse componente deve ser configurado, recebendo o esquema do banco de dados, que informa quais são as agreações existem e quais métricas e dimensões cada agregação contém.
|
|
|
|
|
|
Uma vez que a *engine* recebe uma consulta, ela usa o conhecimento do esquema do banco para selecionar as agregações. Ela também tem a capacidade de informar que uma consulta não pode ser realizada.
|
|
|
|
|
|
A *engine* também informa para a API quais são as métricas e dimensões disponíveis, informação obtida no momento que aengine foi configurada.
|
|
|
|
|
|
## *Adapter*
|
|
|
|
|
|
O *adapter* tem duas funções. Recebe a consulta (em formato métricas, dimensões e filtros) e o conjunto de agregações e cria uma consulta para um banco de dados específico. A segunda função é enviar essa consulta ao banco de dados e retornar os dados.
|
|
|
|
|
|
Cada SGBD (Sistemas gerenciadores de bancos de dados) deve ter um *adapter* próprio, já que cada um fala uma linguagem diferente. Obviamente se dois SGBDS falam a mesma língua, por exemplo SQL, o mesmo adaptador pode ser utilziado para ambos.
|
|
|
|
|
|
Esse é o único componente que tem "contado" direto com o banco de dados. Sempre que o Blendb quer interagir com um banco de dados, essa interação deve ser feita através de um *adapter*. Isso significa que para expandir a portabilidade do Blendb apenas o componente *adapter* deve ser implementado, todos os outros compoenentes podem ser reaproveitados e apenas os adapters necessários precisam ser acionados.
|
|
|
## Fluxo
|
|
|
|
|
|
Quando um usuário realiza uma consulta, ela chega a API. Essa consulta chega em formato de texto que é traduzido para um formato interno do Blendb. Essa consulta então é enviada a *engine*. Quando a *engine* responde o conjundo de agregações a API envia a consulta e o conjunto de agregações para o *adapter* que monta a consulta e envia ao banco de dados. |
|
|
\ No newline at end of file |