... | @@ -2,26 +2,26 @@ Nessa página segue a descrição de como foi implementada a [solução](sobre/s |
... | @@ -2,26 +2,26 @@ Nessa página segue a descrição de como foi implementada a [solução](sobre/s |
|
|
|
|
|
## API
|
|
## 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.
|
|
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 foi implementada como uma API RESTful, onde 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.
|
|
Essa API envia respostas em formato JSON, ou com as informações ou com uma mensagem de erro.
|
|
|
|
|
|
Por que utilizar uma API RESTful:
|
|
Por que utilizar uma API RESTful:
|
|
* Esse era um formato conhecido
|
|
* Esse era um formato conhecido
|
|
* É um formato utilizado na WEB, então outros serviços da WEB tem facilidade de se comunicar com ele
|
|
* É 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.
|
|
* 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.
|
|
* 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.
|
|
* Idealmente substituiria 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.
|
|
* 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*
|
|
## *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.
|
|
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 existentes 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.
|
|
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.
|
|
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 a engine foi configurada.
|
|
|
|
|
|
## *Adapter*
|
|
## *Adapter*
|
|
|
|
|
... | @@ -29,7 +29,7 @@ O *adapter* tem duas funções. Recebe a consulta (em formato métricas, dimens |
... | @@ -29,7 +29,7 @@ O *adapter* tem duas funções. Recebe a consulta (em formato métricas, dimens |
|
|
|
|
|
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.
|
|
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.
|
|
Esse é o único componente que tem "contato" 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
|
|
## 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.
|
|
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.
|
... | | ... | |