【向量库】Weaviate概述与架构解析

一、什么是weaviate

Weaviate 是一个开源的向量数据库(vector database),它能够同时存储数据对象和它们的向量表示

与传统的关系型数据库不同,Weaviate 支持基于语义相似度的检索(即向量搜索/语义搜索(向量和文本相似的搜索)),可以高效地处理文本、图片等多种类型的数据,并支持结合结构化过滤进行复杂查询

Weaviate 的主要特点包括:
搜索:

  • 高效的向量检索:能够在百万级甚至更大规模的数据集中,毫秒级完成最近邻(Nearest Neighbor)搜索。
  • 混合搜索: 结合向量搜索和关键词搜索(文本和向量搜索ing)
  • 向量搜索: 基于 HNSW 算法的高效向量索引
  • 多媒体支持:支持文本、图片等多种数据类型的向量化和检索。

典型应用场景包括语义搜索、图片搜索、相似性检索、推荐系统、异常检测、数据分类等Weaviate 简介 官方文档

 

二、High-Level Architecture

参考:
https://deepwiki.com/search/highlevel-architecture_254cebb0-bc55-4fd7-a374-cfbcaaaaa6ea

在这里插入图片描述

如上架构图体现了 Weaviate 的分层设计:
API 层处理外部接口,Core Components 管理业务逻辑,Extension System 提供可插拔功能,Storage Layer 负责数据持久化。

 

1. Core Components

核心组件 描述
API Layer Weaviate主要入口点,支持REST API(负责设置各种REST处理器,含认证、授权、Schema、对象操作、批量处理、GraphQL接口 )、gRPC API(提供高性能服务,含traverser、认证、schema管理、批量管理功能 )、GraphQL API(提供查询接口,通过traverser解析请求 )
Objects Manager 管理单个对象的CRUD操作,依赖Schema Manager、DB、Modules和授权器
通过ShardLike接口实现对象的CRUD操作,如PutObjectObjectByIDDeleteObject
Schema Manager 1. 负责类定义和元数据管理,集群级别通过Indexer</
Weaviate和ChromaDB都是用于向量数据库的工具,在向量查询性能方面有不同的表现。 Weaviate是一个开源的向量搜索引擎,它支持多种向量索引类型,如HNSW(Hierarchical Navigable Small World),可以实现高效的近似最近邻搜索。Weaviate在大规模数据集上能够利用其分布式架构和优化的索引结构,快速定位查询向量最相似的向量。例如,当处理包含数百万甚至数十亿向量的数据集时,Weaviate可以通过其并行计算能力和分布式存储,将查询任务分配到多个节点上进行处理,从而显著提高查询速度。此外,Weaviate还支持混合搜索,即可以同时根据向量相似度和其他属性进行查询,这在一些复杂的查询场景中非常有用。 ChromaDB是一个轻量级的向量数据库,它的设计目标是简单易用且高效。ChromaDB采用了一种简单而有效的索引策略,在小规模到中等规模的数据集上表现出色。对于包含数千到数十万向量的数据集,ChromaDB可以快速完成向量查询,并且其查询性能受数据集规模的影响相对较小。ChromaDB的优势在于其简洁的API和低资源消耗,对于一些对性能要求不是特别高,但希望快速搭建向量查询系统的场景,ChromaDB是一个不错的选择。 在实际应用中,如果需要处理大规模的数据集,并且对查询性能和系统的可扩展性有较高要求,Weaviate可能更适合。而如果是小规模到中等规模的数据集,并且追求简单易用和低资源消耗,ChromaDB可能是更好的选择。 ```python # 以下是使用Weaviate进行向量查询的简单示例 import weaviate client = weaviate.Client("http://localhost:8080") # 定义查询向量 query_vector = [0.1, 0.2, 0.3] # 构建查询 near_vector = {"vector": query_vector} response = ( client.query .get("YourClassName", ["property1", "property2"]) .with_near_vector(near_vector) .with_limit(10) .do() ) print(response) ``` ```python # 以下是使用ChromaDB进行向量查询的简单示例 import chromadb client = chromadb.Client() collection = client.create_collection(name="your_collection") # 添加向量数据 collection.add( embeddings=[[0.1, 0.2, 0.3], [0.4, 0.5, 0.6]], ids=["id1", "id2"] ) # 定义查询向量 query_vector = [0.1, 0.2, 0.3] # 进行向量查询 results = collection.query( query_embeddings=[query_vector], n_results=1 ) print(results) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

roman_日积跬步-终至千里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值