# SQL Database

import Tag from '~/components/webkit/Tag.vue'
import DocButton from '~/components/webkit/DocButton.vue';




Azion **SQL Database** é uma solução SQL nativa de edge projetada para aplicações serverless. É totalmente compatível com ACID e utiliza o dialeto SQL do SQLite para fornecer um ambiente de desenvolvimento familiar, facilitando a integração rápida. O Azion SQL Database implementa uma arquitetura Principal/Réplicas para permitir consultas com latência ultra baixa no edge da rede, melhorando o desempenho de aplicações distribuídas. Dessa forma, a instância principal é replicada e armazenada em todos os nodes da Edge Network da Azion para garantir a disponibilidade e a tolerância a falhas.

Com o SQL Database, você pode realizar diferentes tarefas, incluindo:

- Armazenar dados de telemetria em tempo real, ideal para IoT.
- Gerenciar inventário de centros de distribuição de comércio eletrônico/varejo distribuídos.
- Armazenar e analisar registros de acesso, identificando e mitigando rapidamente ataques de segurança.
- Armazenar e gerenciar dados de acesso.

Existem duas maneiras de construir um banco de dados através do SQL Database: usando a API REST do SQL Database ou escrevendo uma function. A API REST permite criar, ler, atualizar, excluir e listar bancos de dados. Uma function permite recuperar dados de um banco de dados.

### Implementação

| Escopo | Recurso |
| ------ | ------- |
| Gerenciar bancos de dados com API REST | [Como gerenciar um banco de dados no SQL Database](/pt-br/documentacao/produtos/guias/gerenciar-bancos-dados-edge-sql/) |
| Criar queries com API REST | [Como criar e consultar dados no SQL Database](/pt-br/documentacao/produtos/guias/criar-tabelas-edge-sql/) |
| Ler dados de um banco de dados com uma function | [Como interagir com o Azion SQL Database através do Functions](/pt-br/documentacao/produtos/guides/edge-sql/listando-dados-edge-functions-edge-sql/) |
| Conhecer o Vector Search do SQL Database | [Referência do Vector Search do SQL Database](/pt-br/documentacao/produtos/store/sql-database/vector-search/) |
| Importe dados para o SQL Database | [Guia de importação de dados para o SQL Database](/pt-br/documentacao/produtos/guias/importar-dados-edge-sql/) |

---

## Regras de negócios

Escrever bancos de dados, através da API REST ou de uma function, só é possível na [instância principal](#instancia-principal). Todas as [réplicas](#replicas) são somente leitura.

:::caution[atenção]
Uma vez que você exclui uma instância principal, essa ação não pode ser desfeita. Você não poderá mais escrever ou ler aquele banco de dados.
:::

Durante a criação de um banco de dados, especialmente o primeiro, há um tempo de propagação para que ele seja criado nos edge nodes. A resposta da sua requisição `POST` exibirá um estado de `criando` e você pode executar requisições `GET` para verificar quando estiver criado.

Você também pode usar uma function JavaScript para consultar e analisar se os snapshots foram mergeados nas réplicas.

:::note
Se você receber um estado de `creation_failed`, tente criar o banco de dados novamente ou entre em contato com o [time de suporte](/pt-br/documentacao/servicos/suporte/#canais-de-atendimento) para verificar.
:::

---

## Resiliência de dados

Com uma arquitetura distribuída em execução nos edge nodes da Azion, o SQL Database garante que os dados sejam mantidos seguros e disponíveis. Seus dados são criados em uma instância principal e propagados por réplicas nos edge nodes da Azion.

---

## Bancos de dados

Um banco de dados é um conjunto de tabelas estruturadas que permitem escrever e ler dados na linguagem SQL. Organizados em colunas e linhas, os usuários podem adicionar dados logicamente, com colunas representando informações específicas no eixo vertical, enquanto as linhas representam dados de entrada individuais, relacionados a uma coluna, no eixo horizontal.

[Criar um banco de dados](/pt-br/documentacao/produtos/guias/gerenciar-bancos-dados-edge-sql/) é o primeiro passo para usar o SQL Database e adicionar dados:

```bash
curl --location 'https://api.azion.com/v4/edge_sql/databases' \
--header 'Authorization: Token [TOKEN VALUE]' \
--header 'Content-Type: application/json' \
--data '{
   "name": "meu-banco-de-dados"
}'
```


### Query

Uma query é como você estrutura sua tabela ou uma busca em linhas em um banco de dados previamente criado. É possível fazer consultas com base em relações e restrições.

Por exemplo, para criar uma tabela via cURL:

```bash
curl --location 'https://api.azion.com/v4/edge_sql/databases/{id_database}/query' \
--header 'Authorization: Token [TOKEN VALUE]' \
--header 'Content-Type: application/json' \
--data '{
    "statements": [
        "CREATE TABLE usuarios (id INTEGER PRIMARY KEY, nome TEXT NOT NULL);"
    ]
}'
```

Para consultar dados na tabela já criada:

```bash
curl --location 'https://api.azion.com/v4/edge_sql/databases/{id_database}/query' \
--header 'Authorization: Token [TOKEN VALUE]' \
--header 'Content-Type: application/json' \
--data '{
    "statements": [
        "SELECT * FROM usuarios;"
    ]
}'
```

---

## Vector Search 

[Vector Search](/pt-br/documentacao/produtos/store/sql-database/vector-search/) é um recurso do **SQL Database da Azion** que permite aos clientes implementar mecanismos de busca semântica. Enquanto os modelos de busca tradicionais visam encontrar correspondências exatas, como correspondências de palavras-chave, os modelos de busca vetorial usam algoritmos especializados para identificar itens semelhantes com base em suas representações matemáticas, ou embeddings vetoriais.

Esta funcionalidade se integra nativamente com [AI Inference](/pt-br/documentacao/produtos/ai/ai-inference/) para impulsionar implementações de RAG sem infraestrutura adicional, combinando capacidades SQL e vetoriais em um único banco de dados. O sistema suporta a integração do **LangChain Vector Store** para armazenamento de documentos e do **LangChain Retriever** para busca híbrida avançada que combina capacidades de busca vetorial e de texto completo.

---

## Interagindo com o SQL Database via terminal

Você pode interagir com o SQL Database diretamente do seu terminal usando [o projeto edgesql-shell](https://github.com/aziontech/edgesql-shell). Esta ferramenta fornece uma interface de linha de comando para executar comandos SQL em seus bancos de dados SQL Database.

Consulte a documentação abaixo para detalhes sobre como instalar e usar o EdgeSQL Shell.

<DocButton href="/pt-br/documentacao/produtos/store/sql/install-edge-sql-shell/" label="Ir para o guia de instalação do SQL Database Shell" kind="secondary" size="medium" /> 
<DocButton href="/pt-br/documentacao/produtos/store/sql/edge-sql-shell-commands/" label="Ir para a referência de comandos do SQL Database Shell" kind="secondary" size="medium" />

---

## Instâncias

### Instância principal

A instância de armazenamento primária que recebe todos os comandos de *write* (escrita) e sincroniza os dados recebidos com as réplicas. Também permite ações de *read* (leitura).

Todos os [bancos de dados](#bancos-de-dados) são criados e todas as [queries](#query) são escritas na instância principal. Após o processo automático gerenciado pela Azion, seus dados são processados em edge locations, snapshots são criados e mergeados em réplicas.

:::caution[atenção]
É recomendado sempre criar um backup da sua [instância principal](#instancia-principal) para garantir que seus dados estejam seguros. Como há um tempo de propagação que difere para as réplicas, é melhor fazer backup da principal do que das réplicas.
:::

### Réplicas

Réplicas são cópias *read-only* (somente leitura) da instância principal. As réplicas são atualizadas em tempos de propagação diferentes, então eventualmente estarão sincronizadas na instância principal, mas isso não ocorre instantaneamente.

O processo de replicação ocorre automaticamente através de sistemas de backend da Azion, nos quais snapshots são criados e então mergeados em cada réplica.

Elas lidam com armazenamento, processamento e gerenciamento de dados próximos aos dispositivos que leem os dados, auxiliando na distribuição, disponibilidade e baixa latência de dados.

---

## Linguagens de consulta suportadas

Como o **SQL Database** da Azion é baseado no SQLite, ele suporta as mesmas linguagens SQL que o SQLite.

[Veja as linguagens SQL entendidas](https://www.sqlite.org/lang.html) para criar queries.

---

## Limites

:::tip[dica]
**Aumente limites** <br></br>
Você pode solicitar o aumento dos limites com base no seu plano. Contate o [time de suporte técnico](/pt-br/documentacao/servicos/suporte/) para fazer a solicitação.
:::

Estes são os **limites default**:

| Escopo | Limite | 
| ----- | ----- | 
| Número máximo de colunas por tabela | 100 |
| Duração máxima da consulta SQL | 30 segundos |

Estes são os **limites default** para cada Plano de Serviço:

| Escopo | Developer | Business | Enterprise | Mission Critical |
| ------ | --------- | -------- | ---------- | ---------------- |
| Bancos de dados | 10 | 50 | 200 | 200 |
| Tamanho máximo do banco de dados | 200 MB | 500 MB | 2 GB | 2 GB |
| Armazenamento máximo por conta | 5 GB | 50 GB | 300 GB | 300 GB |

Para ver os os bancos de dados relacionados à sua conta consulte este [guia](/pt-br/documentacao/produtos/store/sql/listar-bancos-de-dados/).

---