|
| 1 | +Português | [English](./README.md) |
| 2 | + |
| 3 | +<p align="center"><a href="https://google.github.io/sqlcommenter/" target="_blank" rel="noopener noreferrer"><img src="https://i.imgur.com/pkcyYLU.png" alt="Sqlcommenter Logo"></a></p> |
| 4 | + |
| 5 | +<p align="center"> |
| 6 | + <a href="https://github.com/reinanhs/sqlcommenter-hyperf/releases"><img src="https://poser.pugx.org/reinanhs/sqlcommenter-hyperf/v/stable" alt="Versão Estável"></a> |
| 7 | + <a href="https://www.php.net"><img src="https://img.shields.io/badge/php-%3E=8.1-brightgreen.svg?maxAge=2592000" alt="Versão do Php"></a> |
| 8 | + <a href="https://packagist.org/packages/reinanhs/sqlcommenter-hyperf"><img src="https://poser.pugx.org/reinanhs/sqlcommenter-hyperf/downloads" alt="Total de Downloads"></a> |
| 9 | + <a href="https://github.com/reinanhs/sqlcommenter-hyperf/blob/main/LICENSE"><img src="https://img.shields.io/github/license/reinanhs/sqlcommenter-hyperf.svg?maxAge=2592000" alt="Licença do Sqlcommenter"></a> |
| 10 | +</p> |
| 11 | + |
| 12 | +## Introdução |
| 13 | + |
| 14 | +Sqlcommenter Hyperf é uma biblioteca projetada para adicionar automaticamente comentários às consultas SQL executadas pelo |
| 15 | +framework [Hyperf](https://github.com/hyperf/hyperf). Esses comentários usam o formato |
| 16 | +[sqlcommenter](https://google.github.io/sqlcommenter/), que é entendido por várias ferramentas e serviços de banco de dados, |
| 17 | +proporcionando insights e rastreabilidade aprimorados para as interações de banco de dados da sua aplicação. |
| 18 | + |
| 19 | +## Instalação |
| 20 | + |
| 21 | +Você pode instalar a biblioteca via Composer: |
| 22 | + |
| 23 | +```shell |
| 24 | +composer require reinanhs/sqlcommenter-hyperf |
| 25 | +``` |
| 26 | + |
| 27 | +Adicione a configuração do componente: |
| 28 | + |
| 29 | +```shell |
| 30 | +php bin/hyperf.php vendor:publish reinanhs/sqlcommenter-hyperf |
| 31 | +``` |
| 32 | + |
| 33 | +## Exemplo |
| 34 | + |
| 35 | +Veja um exemplo de uma consulta simples sendo executada: |
| 36 | + |
| 37 | +```sql |
| 38 | +select * |
| 39 | +from users |
| 40 | +``` |
| 41 | + |
| 42 | +Usando essa biblioteca, a consulta ficará assim: |
| 43 | + |
| 44 | +```sql |
| 45 | +select * |
| 46 | +from users /*framework='Hyperf', |
| 47 | +application='hyperf-skeleton', |
| 48 | +controller='UserController', |
| 49 | +action='index', |
| 50 | +route='%%2Fapi%%2Ftest', |
| 51 | +db_driver='mysql', |
| 52 | +traceparent='00-1cd60708968a61e942b5dacc2d4a5473-7534abe7ed36ce35-01'*/ |
| 53 | +``` |
| 54 | + |
| 55 | +Ao examinar a instrução SQL acima e seu comentário em `/*...*/`, podemos correlacionar e identificar os campos na consulta SQL com o nosso código fonte na nossa aplicação web: |
| 56 | + |
| 57 | +> Tabela 1: Informação sobre a descrição de cada tipo de comentário |
| 58 | +
|
| 59 | +| CAMPO ORIGINAL | INTERPRETAÇÃO | |
| 60 | +|---------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------| |
| 61 | +| **framework**='Hyperf' | A palavra "Hyperf" representa o framework que gerou a consulta. | |
| 62 | +| **application**='hyperf-skeleton' | O nome do projeto onde o código foi executado. | |
| 63 | +| **controller**='UserController' | Nome do controlador em `app/Controller`. | |
| 64 | +| **action**='index' | Nome do método chamado pelo controlador. | |
| 65 | +| **route**='%%2Fapi%%2Ftest' | A rota usada durante a chamada da consulta. | |
| 66 | +| **db_driver**='mysql' | O nome do motor de banco de dados Hyperf. | |
| 67 | +| **traceparent**='00-1cd60708968a61e942b5dacc2d4a5473-7534abe7ed36ce35-01' | O campo [W3C TraceContext Traceparent](https://www.w3.org/TR/trace-context/#traceparent-field) do trace OpenTelemetry. | |
| 68 | + |
| 69 | +Várias ferramentas e serviços podem interpretar esses comentários, ajudando a correlacionar o código do usuário com as instruções SQL geradas pelo ORM, e podem ser examinadas nos logs do servidor de banco de dados. Isso fornece uma melhor observabilidade do estado da sua aplicação até o servidor de banco de dados. |
| 70 | + |
| 71 | +Aqui está um exemplo de como essas informações aparecem no [Google Cloud SQL](https://cloud.google.com/sql/docs/postgres/using-query-insights): |
| 72 | + |
| 73 | + |
| 74 | + |
| 75 | +A imagem acima ilustra como as informações do sqlcommenter são mapeadas dentro do Google Cloud. Nesse contexto, o sqlcommenter está sendo usado para adicionar tags no Query Insights, facilitando a identificação de qual parte do código da aplicação está causando problemas de desempenho. |
| 76 | + |
| 77 | +Ao clicar em uma dessas tags, você poderá visualizar informações detalhadas sobre as consultas. Veja o exemplo abaixo: |
| 78 | + |
| 79 | + |
| 80 | + |
| 81 | +Além do **Cloud SQL**, várias outras ferramentas também suportam _sqlcommenter_. Um exemplo é o [Planetscale Query Insights](https://planetscale.com/docs/concepts/query-insights). |
| 82 | + |
| 83 | +## Trace |
| 84 | + |
| 85 | +Ao usar a biblioteca sqlcommenter-hyperf, você pode vincular as informações de trace do Cloud SQL Query com seu projeto Hyperf. Ao correlacionar suas informações, você alcançará um nível de rastreabilidade muito mais detalhado do que o fornecido pelo Hyperf por padrão. |
| 86 | + |
| 87 | +Abaixo está uma comparação entre duas imagens mostrando as informações de trace do SQL padrão no Hyperf e do trace do Cloud SQL Query: |
| 88 | + |
| 89 | +A imagem abaixo exemplifica o trace do SQL padrão no Hyperf: |
| 90 | + |
| 91 | + |
| 92 | + |
| 93 | +A imagem abaixo exemplifica o trace do Cloud SQL associado a uma requisição no Hyperf: |
| 94 | + |
| 95 | + |
| 96 | + |
| 97 | +Uma dica ao usar a biblioteca sqlcommenter-hyperf é desabilitar o trace SQL padrão no Hyperf, pois você obterá informações mais detalhadas através do trace do Cloud SQL Query na GCP. |
| 98 | + |
| 99 | +## Configuração |
| 100 | + |
| 101 | +Quando você instala a biblioteca em seu projeto, ela será automaticamente habilitada através das configurações padrão. Portanto, para usar esta biblioteca, você só precisa tê-la instalada em seu projeto. |
| 102 | + |
| 103 | +No entanto, se desejar desabilitar alguns comentários, você pode fazer isso através das configurações. Também vale mencionar que você pode desabilitar completamente a execução desta biblioteca em um ambiente específico através das configurações. |
| 104 | + |
| 105 | +Com as configurações abaixo, você pode habilitar ou desabilitar os comentários gerados por esta biblioteca. Por padrão, todos os comentários estão habilitados. Você encontrará essa configuração no arquivo `config/autoload/sqlcommenter.php`: |
| 106 | + |
| 107 | +```php |
| 108 | +'enable' => env('SQLCOMMENTER_ENABLE', true), |
| 109 | +'include' => [ |
| 110 | + 'framework' => env('SQLCOMMENTER_ENABLE_FRAMEWORK', true), |
| 111 | + 'controller' => env('SQLCOMMENTER_ENABLE_CONTROLLER', true), |
| 112 | + 'action' => env('SQLCOMMENTER_ENABLE_ACTION', true), |
| 113 | + 'route' => env('SQLCOMMENTER_ENABLE_ROUTE', true), |
| 114 | + 'application' => env('SQLCOMMENTER_ENABLE_APPLICATION', true), |
| 115 | + 'db_driver' => env('SQLCOMMENTER_ENABLE_DB_DRIVER', true), |
| 116 | +], |
| 117 | +``` |
| 118 | + |
| 119 | +Veja abaixo uma explicação detalhada de cada uma das configurações: |
| 120 | + |
| 121 | +| Configuração | Tipo | Padrão | Descrição | |
| 122 | +|-----------------------|---------|--------|--------------------------------------------------------------------------------------------------------------------------------| |
| 123 | +| `enable` | Boolean | `true` | Controla se o SQLCommenter está habilitado ou desabilitado. Defina como `true` para habilitar o SQLCommenter e adicionar comentários às consultas SQL. | |
| 124 | +| `include.framework` | Boolean | `true` | Inclui o nome do framework usado nos comentários SQL. | |
| 125 | +| `include.controller` | Boolean | `true` | Inclui o nome do controlador responsável pela ação que gerou a consulta SQL. | |
| 126 | +| `include.action` | Boolean | `true` | Inclui o nome da ação ou método dentro do controlador que gerou a consulta SQL. | |
| 127 | +| `include.route` | Boolean | `true` | Inclui a rota associada à requisição que gerou a consulta SQL. | |
| 128 | +| `include.application` | Boolean | `true` | Inclui o nome da aplicação nos comentários SQL. | |
| 129 | +| `include.db_driver` | Boolean | `true` | Inclui o nome do driver de banco de dados usado para executar a consulta SQL. | |
| 130 | + |
| 131 | +## Funcionalidades |
| 132 | + |
| 133 | +- Adiciona automaticamente comentários compatíveis com sqlcommenter às consultas SQL. |
| 134 | +- Proporciona melhor rastreabilidade e insights nas interações com o banco de dados. |
| 135 | +- Integração fácil com o framework Hyperf. |
| 136 | +- Suporta múltiplos drivers de banco de dados. |
| 137 | + |
| 138 | +## Desempenho |
| 139 | + |
| 140 | +Usar a biblioteca Sqlcommenter Hyperf pode introduzir um pequeno impacto de desempenho devido à adição de comentários às consultas SQL. No entanto, os benefícios em termos de rastreabilidade, facilidade de depuração e integração com ferramentas de monitoramento geralmente superam esse impacto. |
| 141 | + |
| 142 | +Para demonstrar a eficácia da biblioteca Sqlcommenter Hyperf, realizaremos dois testes distintos. A medição será realizada em um ambiente controlado do Google Cloud Run com as seguintes configurações: |
| 143 | + |
| 144 | +- CPU sempre alocada |
| 145 | +- Número mínimo de instâncias: 1 |
| 146 | +- Número máximo de instâncias: 1 |
| 147 | +- Memória por instância: 1GB |
| 148 | +- Número de vCPUs por instância: 1vCPU |
| 149 | +- Máximo de requisições concorrentes por instância: 1000 |
| 150 | + |
| 151 | +Veja abaixo o projeto que foi usado como experimento: |
| 152 | + |
| 153 | +- [sample-sqlcommenter-hyperf-poc](https://github.com/ReinanHS/sample-sqlcommenter-hyperf-poc) |
| 154 | + |
| 155 | +### Teste de tempo médio de execução do bloco de código: |
| 156 | + |
| 157 | +Neste teste, mediremos o tempo médio de execução do bloco de código SqlCommenterAspect que adiciona comentários SQL. Após coletar 10.000 registros de tempo de execução para esta operação, calculamos o tempo médio de execução, que foi de aproximadamente **0.103 milissegundos (ms)**. |
| 158 | + |
| 159 | +Esse valor indica que a inserção de comentários SQL nas consultas é uma operação extremamente rápida, adicionando um overhead insignificante ao tempo total de execução da consulta. |
| 160 | + |
| 161 | +- [Documentação completa sobre o teste de tempo médio de execução do bloco de código](https://github.com/ReinanHS/sqlcommenter-hyperf/wiki/Performance#average-execution-time-test-of-the-code-block) |
| 162 | + |
| 163 | +### Teste de desempenho de latência de requisição |
| 164 | + |
| 165 | +Neste teste, usaremos K6 para fazer várias requisições e comparar o desempenho com a biblioteca habilitada e desabilitada. Veja os resultados deste experimento abaixo: |
| 166 | + |
| 167 | + |
| 168 | + |
| 169 | +Ao analisar a imagem acima, podemos ver que inicialmente os tempos de resposta são muito semelhantes para ambas as configurações. No entanto, à medida que o consumo de CPU aumenta e nos aproximamos do limite de 1 vCPU, a configuração desabilitada (False) começa a apresentar um desempenho ligeiramente melhor. Ao examinar os gráficos de utilização da CPU, observamos que em torno de 400 VUs, o uso da CPU era de aproximadamente 98% para ambas as configurações. |
| 170 | + |
| 171 | +Quando a biblioteca não está competindo intensamente pelo uso da CPU, ela consegue manter um desempenho muito bom, próximo ao da configuração desabilitada. Isso sugere que em condições de alta demanda, a configuração desabilitada pode lidar com a carga ligeiramente melhor, resultando em um aumento marginal no número de requisições atendidas por segundo. |
| 172 | + |
| 173 | +Se você deseja verificar as informações detalhadas sobre o teste, é recomendado clicar no link abaixo: |
| 174 | + |
| 175 | +- [Documentação completa sobre o teste de desempenho de latência de requisição](https://github.com/ReinanHS/sqlcommenter-hyperf/wiki/Performance#request-latency-performance-test) |
| 176 | + |
| 177 | +## Changelog |
| 178 | + |
| 179 | +Por favor, veja o [CHANGELOG](CHANGELOG.md) para mais informações sobre o que mudou recentemente. |
| 180 | + |
| 181 | +## Contribuindo |
| 182 | + |
| 183 | +Você quer fazer parte deste projeto? Leia [como contribuir](CONTRIBUTING.md). |
| 184 | + |
| 185 | +## Vulnerabilidades de segurança |
| 186 | + |
| 187 | +Por favor, revise [nossa política de segurança](https://github.com/reinanhs/sqlcommenter-hyperf/security/policy) sobre como reportar vulnerabilidades de segurança. |
| 188 | + |
| 189 | +### Licença |
| 190 | + |
| 191 | +Este projeto está sob licença. Veja o arquivo [LICENSE](LICENSE) para mais detalhes. |
0 commit comments