Las bases de datos vectoriales están en aumento y sus aplicaciones están en todas partes. Son súper rápidas (imagina buscar a través de miles de millones de entradas en una fracción de segundo) y requieren muchos menos recursos (no necesitas ninguna GPU). Y a pesar de todo esto, tienen un rendimiento excelente y son lo suficientemente confiables como para ser utilizadas en sectores como la salud pública, las finanzas y la biometría.
Hay varias bases de datos vectoriales disponibles, y MyScale es una de ellas, que es una base de datos vectorial basada en SQL. Ya seas un usuario de bases de datos vectoriales o nuevo en ellas, elegir entre ellas puede ser complicado; depende de varios factores como el precio, la escalabilidad, la disponibilidad de algunas características particulares, algunos puntos de referencia, etc. Para ayudar a los usuarios a tomar una decisión de manera exhaustiva, hemos introducido esta serie de artículos que comparan diferentes bases de datos vectoriales (opens new window). En esta secuela, compararemos MyScale y Weaviate.
# Una breve introducción a MyScale
MyScale (opens new window) es una base de datos en la nube de código abierto diseñada para soluciones impulsadas por IA. Construida sobre ClickHouse y Tantivy, combina la potencia de SQL, las bases de datos vectoriales y las funcionalidades de búsqueda de texto completo en una sola plataforma. MyScale admite SQL completo, incluyendo consultas complejas, lo que lo hace confiable y escalable para la gestión de datos a gran escala.
Optimizado para aplicaciones de IA, MyScale maneja datos estructurados y vectorizados de manera eficiente, lo que permite un procesamiento analítico sólido. Su arquitectura OLAP heredada de CilckHouse garantiza un rendimiento extremadamente rápido, capaz de realizar búsquedas en miles de millones de vectores en milisegundos. Además, MyScale es altamente accesible, ya que solo requiere SQL para la interacción, lo que simplifica su integración en sus sistemas existentes.
# ¿Qué es Weaviate?
Weaviate es una base de datos vectorial de código abierto (opens new window) escrita en Go, diseñada para gestionar tanto objetos como vectores. Está altamente optimizada para aplicaciones de aprendizaje automático e IA, especialmente aquellas que requieren búsquedas rápidas de vectores. Weaviate ofrece tanto niveles gratuitos como de pago según el uso, lo que lo hace accesible para diversos proyectos.
La base de datos destaca por su velocidad, realizando búsquedas de vecinos más cercanos en millones de puntos de datos en cuestión de milisegundos. Esta velocidad la convierte en una opción sólida para tareas como la búsqueda semántica, los sistemas de recomendación y la clasificación. Weaviate también se integra fácilmente con modelos de aprendizaje automático populares, admitiendo una amplia gama de tipos de medios, incluyendo texto e imágenes, al tiempo que ofrece escalabilidad y características nativas de la nube.
Ahora comenzaremos la comparación en diferentes aspectos, comenzando por el alojamiento.
# Alojamiento
Cuando alojas una base de datos vectorial como Weaviate o MyScale, es esencial considerar cuidadosamente el entorno de implementación, incluso durante la fase experimental. Estas bases de datos se pueden alojar en máquinas locales, pero generalmente se prefiere el alojamiento nativo en la nube por su escalabilidad y facilidad de uso. Plataformas en la nube como AWS, Google Cloud o Kubernetes ofrecen opciones flexibles para escalar según su carga de trabajo.
# Docker/Local
Tanto MyScale como Weaviate son de código abierto, por lo que se pueden ejecutar localmente utilizando Docker. Esto es bastante útil para aplicaciones pequeñas, aplicaciones basadas en privacidad o simplemente para probar algo con fines experimentales. Puedes ejecutar MyScale localmente de la siguiente manera:
docker run --name MyScale --net=host myscale/MyScale:1.6
Para Weaviate, puedes usar Docker compose de la siguiente manera:
docker run -p 8080:8080 -p 50051:50051 cr.weaviate.io/semitechnologies/weaviate:1.27.0
# Alojamiento en la nube
A pesar de la disponibilidad de estas soluciones basadas en Docker, hay varias razones por las que los usuarios prefieren los servicios basados en la nube:
- Mejores recursos
- Algoritmos optimizados
- Escalabilidad
Tanto Weaviate como MyScale ofrecen soluciones en la nube gratuitas y de pago, y las dos opciones para servicios de pago son:
- Optimizado para capacidad (por defecto, más económico)
- Optimizado para rendimiento (mejor rendimiento, más caro)
# Funcionalidades principales
Ahora veamos la comparación de las funcionalidades principales de las dos bases de datos, cada una con sus propios méritos.
# Lenguaje de consulta y soporte de API
- Ambos admiten clientes en diferentes lenguajes, como Python, Node.JS, Go, etc.
- Ambos proporcionan soporte para las API de GraphQL y REST.
Weaviate: su última versión nos proporciona soporte para la API de gRPC también. Además, cabe destacar que los nuevos clientes de Python y TypeScript para Weaviate aún no son estables.
MyScale: El verdadero poder de MyScale radica en el soporte para SQL. Puedes utilizar SQL tradicional para interactuar y gestionar la base de datos.
# Soporte de metadatos
Tanto MyScale como Weaviate admiten metadatos. MyScale optimiza la búsqueda de vectores filtrados utilizando su algoritmo MSTG junto con las capacidades avanzadas de indexación y procesamiento paralelo de ClickHouse. Además, se adopta una estrategia de prefiltrado para reducir el conjunto de datos antes de la búsqueda principal de vectores, mejorando el rendimiento y la precisión.
TL;DR:
Ambos admiten metadatos, mientras que el filtrado de metadatos de MyScale, gracias a la escalabilidad de ClickHouse, no se degrada en rendimiento, incluso para conjuntos de datos más grandes.
# Tipos de datos admitidos
Tanto MyScale como Weaviate admiten los vectores obviamente. También admiten tipos avanzados como geoCoordinates
.
Weaviate: tiene el tipo cross-reference
, que nos permite vincular diferentes objetos a otros.
MyScale: admite todos los tipos de datos SQL.
Por ejemplo, aquí hay una tabla que tiene un tipo de vector para almacenar las incrustaciones de texto, combinado con tipos de datos primitivos (para id
y sentences
).
CREATE TABLE IF NOT EXISTS BookEmbeddings (
id UInt64,
sentences String,
embeddings Array(Float32),
CONSTRAINT check_data_length CHECK length(embeddings) = 1536
) ENGINE = MergeTree()
ORDER BY id;
MyScale tiene soporte completo de SQL y, como resultado, podemos escribir consultas bastante complejas, por ejemplo:
SELECT
myscale_movie.id,
myscale_movie.title,
myscale_rating.rating,
distance(
myscale_movie.embedding,
[0.00578, 0, ..., 0, 0.00984]
) AS dist
FROM
myscale_movie
INNER JOIN myscale_rating
ON myscale_rating.movieId = myscale_movie.id
WHERE
myscale_rating.rating > 4
ORDER BY
dist DESC
LIMIT 10;
TL;DR:
Tanto MyScale como Weaviate admiten vectores y tipos de datos respectivos. MyScale tiene la clara ventaja de tener tipos de datos SQL completos y características de SQL.
# Escalabilidad
Si bien veremos los detalles de precios en la última parte de este blog, es importante destacar que (bajo el precio estándar), MyScale ofrece hasta 320 millones de vectores (opens new window), mientras que la escalabilidad de Weaviate está limitada ya que no ofrece soluciones más allá de los 50 millones de vectores (opens new window). Esto muestra una limitación seria de Weaviate, ya que tener millones de vectores en una base de datos no es algo inusual.
# Indexación
Al ser de código abierto, ambos admiten varios algoritmos de indexación como HNSW, FLAT y Dynamic.
Weaviate: su indexación estaba en fase experimental hasta hace poco.
MyScale: va un paso más allá no solo de Weaviate, sino de todas las bases de datos vectoriales populares al admitir el Multi-Scale Tree Graph (MSTG) (opens new window), un algoritmo que combina la agrupación jerárquica de árboles y la búsqueda basada en grafos. Supera a los algoritmos contemporáneos al proporcionar búsquedas más rápidas con un consumo de recursos reducido.
# Búsqueda de vectores filtrados y búsqueda de texto completo
MyScale optimiza la búsqueda de vectores filtrados (opens new window) a través de su algoritmo MSTG. Este enfoque, junto con las capacidades avanzadas de indexación y procesamiento paralelo de ClickHouse, permite que MyScale maneje conjuntos de datos grandes de manera eficiente. La estrategia de prefiltrado adoptada por MyScale reduce el conjunto de datos antes de la búsqueda principal de vectores, asegurando que solo se procesen los datos más relevantes, mejorando así tanto el rendimiento como la precisión.
Weaviate también admite búsquedas de vectores, pero su estado en las búsquedas de texto completo no está claro. MyScale, por otro lado, admite tanto búsquedas de texto completo como búsqueda híbrida (opens new window).
Por cierto, tanto MyScale (opens new window) como Weaviate admiten la búsqueda de múltiples vectores.
Puedes utilizar la función HybridSearch()
en MyScale, que combina los resultados de las búsquedas de texto completo y de vectores para proporcionar mejores resultados. La imagen anterior lo explica bastante bien para una tabla dada wiki_abstract_mini
.
# Búsqueda geográfica
La búsqueda geográfica es algo de gran importancia no solo para mapas y aplicaciones SIG, sino también en muchas otras aplicaciones. Incluso una aplicación simple como FoodPanda o una tienda de comestibles puede requerirlo. Sin embargo, Weaviate no lo proporciona. MyScale tiene varias funciones geoespaciales (opens new window) para admitir la búsqueda geográfica. Por ejemplo, greatCircleDistance()
encuentra la distancia entre dos puntos en la Tierra (tomada como una variedad):
SELECT greatCircleDistance(31.5, 74.33, 25.30, 51.54)
--Salida: 2,553,475.8
Aquí, utilizamos esta función para encontrar la distancia entre dos ciudades (Lahore y Doha) utilizando la fórmula del círculo máximo (opens new window). La distancia devuelta está en metros y como podemos verificar, es correcta (opens new window). Aquí, la diferencia de unos pocos kilómetros se debe a la selección de los centros de las ciudades.
Weaviate también admite datos geográficos y, aunque aún no cuenta con una función de búsqueda geoespacial, nos permite filtrar en función de las coordenadas geográficas para buscar dentro de un área específica. Por ejemplo, este código toma las coordenadas de la ubicación deseada y busca dentro de un círculo de 500 m.
import weaviate
from weaviate.classes.query import Filter, GeoCoordinate
import os
client = weaviate.connect_to_local()
response = publications.query.fetch_objects(
filters=(
Filter
.by_property("headquartersGeoLocation")
.within_geo_range(
coordinate=GeoCoordinate(
latitude=30.5,
longitude=78.3
),
distance=500 # En metros
)
),
)
# Integración de API de LLM
- Tanto MyScale como Weaviate admiten varias API de LLM como OpenAI, LLamaIndex, LangChain, etc.
- Ambos también admiten modelos de Cohere y DSPy para la generación automática de instrucciones.
Como ejemplo, aquí hay un código que integra LangChain con MyScale utilizando las incrustaciones de OpenAI.
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import MyScale
loader = TextLoader("../../../../how_to/state_of_the_union.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
embeddings = OpenAIEmbeddings()
for i, d in enumerate(docs):
d.metadata = {"doc_id": i}
docsearch = MyScale.from_documents(docs, embeddings)
Este código toma un archivo de texto, carga los documentos y obtiene sus incrustaciones utilizando el modelo de OpenAI. Luego, cargará los datos en el clúster de MyScale. Si el índice no existe, se creará y, si ya existe, se reutilizará.
# Observabilidad del rendimiento de la aplicación LLM
MyScale Telemetry (opens new window) es una herramienta especializada diseñada para mejorar la observabilidad de los modelos de lenguaje de gran tamaño (LLM) mediante la captura y el almacenamiento de datos de traza de las aplicaciones, especialmente aquellas construidas con LangChain. Estos datos de traza se almacenan en MyScaleDB (o ClickHouse) y se pueden analizar para la depuración y la optimización del rendimiento.
Los desarrolladores pueden monitorear el comportamiento de sus LLM a través de paneles visuales, como el panel de trazas de Grafana, que simplifica el proceso de diagnóstico de problemas y evaluación del rendimiento de la aplicación en tiempo real. Esta herramienta facilita obtener información detallada sobre el comportamiento en tiempo de ejecución de los LLM con un impacto mínimo en el rendimiento.
# Precios
Al final, cada solución está limitada por dos parámetros fundamentales: el precio y la eficiencia. En cuanto a la eficiencia, la evaluaremos en breve. En primer lugar, comparemos los aspectos económicos.
Tanto Weaviate como MyScale ofrecen niveles gratuitos y de pago. Aquí proporcionaremos una comparación breve (y concisa) de ambos.
# Nivel gratuito
El nivel gratuito de Weaviate está limitado a un sandbox de solo 14 días. Después de 14 días, los usuarios deben elegir entre comprar el servicio o dejar de usarlo. Por otro lado, MyScale ofrece almacenamiento gratuito de hasta 5 millones de vectores de 768 dimensiones y no está limitado a ningún número de días (siempre que el clúster no esté inactivo durante 7 días).
# Nivel de pago
Los niveles gratuitos son buenos para experimentar, pero al final, debes implementar soluciones en servidores dedicados, lo que requiere dinero.
MyScale tiene dos niveles de pago:
- Pod optimizado para capacidad
- Pod optimizado para rendimiento
En los pods optimizados para capacidad, obtendrás 10 millones de vectores por pod, mientras que la configuración optimizada para rendimiento proporciona una latencia más baja (5 millones de vectores por pod).
Weaviate ofrece 3 opciones:
- Nube sin servidor
- Nube empresarial
- Trae tu propia nube.
En la siguiente tabla, proporcionamos la comparación de ambos (optimizado para capacidad y optimizado para rendimiento) con la nube sin servidor de Weaviate (la más económica). La información sobre los otros dos precios no está disponible públicamente en su sitio web y, por lo tanto, se omite. Weaviate tiene una limitación seria de que no ofrece soporte más allá de los 50 millones de vectores.
Capacidad | Weaviate por defecto ($)/hora | Weaviate alto rendimiento | MyScale optimizado para capacidad ($)/hora | Pods | MyScale optimizado para rendimiento ($)/hora | Pods |
---|---|---|---|---|---|---|
10 millones | 1.021 | 2.95 | 0.09 | 1 | 0.33 | 2 |
20 millones | 2.042 | 5.9 | 0.19 | 2 | 0.67 | 4 |
40 millones | 4.084 | 11.8 | 0.38 | 4 | 1.33 | 8 |
80 millones | - | - | 0.76 | 8 | 2.67 | 16 |
160 millones | - | - | 1.51 | 16 | 5.33 | 32 |
320 millones | - | - | 3.02 | 32 | 10.66 | 64 |
Como podemos ver, MyScale es mucho más económico que Weaviate, tanto en la configuración por defecto como en la de alto rendimiento. Incluso la configuración optimizada para rendimiento es 3 veces más barata que los clústeres por defecto de Weaviate.
TL;DR: En cuanto a la relación calidad-precio, no hay competencia con MyScale. Por ejemplo, el alojamiento de 80 millones de vectores de MyScale cuesta menos que el alojamiento de 10 millones de Weaviate. Además, tiene la ventaja de una mejor escalabilidad también.
# Evaluación comparativa
Sería una comparación justa evaluar las dos bases de datos en términos de algunos atributos básicos. Para la evaluación comparativa, compararemos MyScale (usando MSTG) con estas dos configuraciones diferentes de Weaviate. Para que la comparación sea imparcial, utilizaremos las últimas versiones de Weaviate:
- Versión antigua de Weaviate
- Nueva versión de Weaviate (v1.23.3)
# Rendimiento
El número de consultas por segundo es una buena medida básica de una base de datos vectorial. Podemos ver claramente que MyScale (verde lima oscuro) supera a Weaviate clásico. Weaviate v1.23 (color gris oscuro) supera a MyScale solo para 8 hilos o más. MyScale sigue teniendo una clara ventaja en términos de precisión media, como podemos ver.
TL;DR:
MyScale supera a las dos versiones antiguas y nuevas de Weaviate hasta 4 hilos. Para más hilos, la última versión de Weaviate supera a MyScale, aunque MyScale tiene una mejor precisión.
# Latencia promedio de consulta
La latencia promedio de consulta se puede definir como el tiempo (cuanto menor, mejor) que tarda la base de datos en promedio en devolver los resultados de la consulta. MyScale supera cómodamente a los nodos de Weaviate aquí. Solo para 16 hilos Weaviate muestra una ventaja sobre MyScale.
# Latencia P95
Tenemos resultados similares en la latencia P95 también. Una vez que los hilos superan los 8, la última versión de Weaviate muestra una latencia mejor (más rápida) que MyScale, mientras que para la versión heredada, MyScale supera a Weaviate por un margen considerable.
# Tiempo de ingestión de datos
Esta evaluación comparativa se limita a un solo hilo, por lo que mostraremos un solo gráfico aquí. MyScale (en verde marino aquí) supera cómodamente a Weaviate en cuanto al tiempo que tarda en cargar y construir los datos. La diferencia entre su precisión media también es bastante notable (cada fracción cercana al 100% importa).
# Costo mensual
Incluso el costo mensual de Weaviate heredado está muy por encima del de MyScale (justo en la parte inferior en cada gráfico). Solo para 8 o 16 hilos se acercan entre sí.
TL;DR:
MyScale te proporciona la mejor relación calidad-precio al proporcionar un costo mensual mínimo por QPS.
# Conclusión
En el campo de las bases de datos vectoriales en constante expansión, tanto MyScale como Weaviate presentan soluciones sólidas, cada una con sus fortalezas únicas. Decidir entre las dos requiere una cuidadosa consideración de los requisitos específicos del proyecto. MyScale destaca en escalabilidad, eficiencia de costos y latencia, lo que lo convierte en una opción convincente para aplicaciones a gran escala que necesitan gestionar datos estructurados y vectoriales extensos y beneficiarse de su soporte completo de SQL. Esta capacidad para manejar consultas complejas de manera eficiente e integrarse sin problemas con tipos de datos tradicionales posiciona a MyScale como una solución más completa para proyectos que requieren tanto análisis de datos avanzados como búsqueda rápida de vectores.
Por otro lado, Weaviate, construido para aplicaciones centradas en IA, ofrece flexibilidad con su soporte para una variedad de modelos de aprendizaje automático e incrustaciones. Su API robusta, arquitectura modular y actualizaciones en tiempo real lo convierten en una excelente opción para proyectos que requieren interacción dinámica con datos no estructurados. Si bien ambas bases de datos admiten varios lenguajes de programación, la compatibilidad total de SQL de MyScale lo posiciona como una solución más completa para proyectos que requieren tanto análisis de datos avanzados como búsqueda rápida de vectores.