Skip to content

Commit

Permalink
[EDU-5674] refactor: add Vector Search limits section (#1394)
Browse files Browse the repository at this point in the history
* chore: disabled npm run tsc

* refactor: add limits - en

* refactor: add limits - pt

---------

Co-authored-by: robsongajunior <robson.ga.junior@gmail.com>
  • Loading branch information
MarianaAguilera and robsongajunior authored Dec 16, 2024
1 parent 98e5826 commit 4df7b5d
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ The Azion Libraries provide tools and utilities to interact with Azion services

## Columns

To store vectors in a vector search database, you can add a column specifically for the vector data. Edge SQL Vector Seach supports embedding models, without dimension restrictions.
To store vectors in a vector search database, you can add a column specifically for the vector data.

For example, using the `text-embedding-3-small` model and a `1536` dimension, this column should be declared to hold an array of 32-bit floating-point numbers as a binary large object (BLOB) type, as follows. The (3) in the example specifies the number of 32-bit floating-point (F32) elements in the vector, indicating a 3-dimensional vector:

Expand Down Expand Up @@ -126,4 +126,22 @@ ON
teams.rowid = id
WHERE
year >= 2023;
```
```

---

## Limits and considerations

- Vector Search uses **libSQL**.
- LibSQL uses the native SQLite BLOB storage class for vector columns, defined according to the number of bits used to represent each floating-point number in the vector.
- Supported vector types: `FLOAT1BIT | F1BIT_BLOB`, `FLOAT8 | F8_BLOB`, `FLOATB16 | FB16_BLOB`, `FLOAT16 | F16_BLOB`, `FLOAT32 | F32_BLOB`, and `FLOAT64 | F64_BLOB`. The `FLOAT32` is recommended as a starting point.
- The vector_distance_cos function calculates the cosine distance, which is defined at: `Cosine Distance = 1 — Cosine Similarity`.
- The cosine distance ranges *from 0 to 2*, where:
- A distance close to `0` indicates that the vectors are nearly identical or exactly matching.
- A distance close to `1` indicates that the vectors are orthogonal (perpendicular).
- A distance close to `2` indicates that the vectors are pointing in opposite directions.
- Euclidian distance isn't supported for `1-bit FLOAT1BIT vectors`.
- LibSQL can only operate on vectors with no more than *65536 dimensions*.
- LibSQL implements the DiskANN algorithm to speed up approximate nearest neighbor queries for tables with vector columns. Check the [Indexing](#indexing) section for more information.
- To query a vector index, you must use the vector_top_k(idx_name, q_vector, k) function, which finds the top k nearest neighbors and returns their ROWID or PRIMARY KEY.
- Vector index works only for tables with ROWID or with singular PRIMARY KEY. Composite PRIMARY KEY without ROWID isn't supported.
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ As Azion Libraries fornecem ferramentas para interagir com os serviços da Azion

## Colunas

Para armazenar vetores em um banco de dados de busca vetorial, você pode adicionar uma coluna especificamente para os dados vetoriais. O Vector Search do Edge SQL suporta modelos de embedding, sem restrições de dimensão.
Para armazenar vetores em um banco de dados de busca vetorial, você pode adicionar uma coluna especificamente para os dados vetoriais.

Por exemplo, usando o modelo `text-embedding-3-small` e uma dimensão de `1536`, essa coluna deve ser declarada para conter um array de números de ponto flutuante de 32 bits como um tipo de objeto binário grande (BLOB). O (3) no exemplo especifica o número de elementos de ponto flutuante de 32 bits (F32) no vetor, indicando um vetor de 3 dimensões:

Expand Down Expand Up @@ -128,3 +128,20 @@ WHERE
year >= 2023;
```

---

## Limites e considerações

- O Vector Search utiliza **libSQL**.
- O LibSQL usa a classe de armazenamento BLOB nativa do SQLite para colunas vetoriais, definida de acordo com o número de bits usados para representar cada número de ponto flutuante no vetor.
- Tipos de vetor suportados: `FLOAT1BIT | F1BIT_BLOB`, `FLOAT8 | F8_BLOB`, `FLOATB16 | FB16_BLOB`, `FLOAT16 | F16_BLOB`, `FLOAT32 | F32_BLOB` e `FLOAT64 | F64_BLOB`. O `FLOAT32` é recomendado como ponto de partida.
- A função vector_distance_cos calcula a distância cosseno, que é definida como: `Distância Cosseno = 1 — Similaridade Cosseno`.
- A distância cosseno varia *de 0 a 2*, onde:
- Uma distância próxima de `0` indica que os vetores são quase idênticos ou exatamente correspondentes.
- Uma distância próxima de `1` indica que os vetores são ortogonais (perpendiculares).
- Uma distância próxima de `2` indica que os vetores estão apontando em direções opostas.
- A distância euclidiana não é suportada para vetores `FLOAT1BIT de 1 bit`.
- O LibSQL só pode operar em vetores com no máximo *65536 dimensões*.
- O LibSQL implementa o algoritmo DiskANN para acelerar consultas de vizinhos mais próximos aproximados para tabelas com colunas vetoriais. Consulte a seção [Indexação](#indexação) para mais informações.
- Para consultar um índice vetorial, você deve usar a função vector_top_k(idx_name, q_vector, k), que encontra os k vizinhos mais próximos e retorna seu ROWID ou PRIMARY KEY (chave primária).
- O índice vetorial funciona apenas para tabelas com ROWID ou com CHAVE PRIMARY KEY singular. Chaves primárias compostas sem ROWID não são suportadas.

0 comments on commit 4df7b5d

Please sign in to comment.