Weaviate向量数据库介绍与集群部署(docker-compose)
Weaviate是一款开源的云原生向量数据库,由SeMI Technologies于2019年创立。它支持高效存储和管理高维向量数据,提供混合存储、高性能搜索、多模态支持等特性,适用于推荐系统、语义搜索等智能应用场景。文章详细介绍了Weaviate的核心特点、应用场景及与同类产品的对比,并提供了Docker部署指南,包括单机模式和集群模式的配置方法。部署过程涉及镜像导入、docker-compos
·
一、Weaviate介绍
Weaviate 由荷兰公司SeMI Technologies 于 2019年6月28日创立。它定位为 AI原生基础设施 ,其核心产品是矢量数据库 ,旨在简化开发者的矢量数据管理流程。 Weaviate是一款开源的云原生向量数据库,专为高效存储、管理高维向量数据及实现快速相似性搜索而设计。 其名称“Weaviate”发音可参考为“wee-vee-ate”,寓意编织(weave)数据与AI能力。
Weaviate 凭借其混合存储、高性能搜索、灵活架构和多模态支持,成为构建智能应用(如推荐系统、语义搜索、知识图谱)的理想选择,尤其适合需要结合结构化数据和向量数据的复杂查询场景,是AI原生时代数据存储与检索的关键基础设施。
1.1 核心特点
混合存储与查询能力
- 同时存储对象数据(如文本、图像、元数据)和向量数据,支持向量搜索+结构化过滤(如价格、时间范围等)的混合查询,实现语义相似性与精确条件的双重匹配。
- 采用HNSW(层次可导航小世界图)、IVF(倒排文件索引)等先进索引技术,支持余弦相似度、欧几里得距离、点积等多种距离度量,确保亚毫秒级延迟的10-NN搜索性能。
开源与云原生架构
- 支持自托管和云托管模式,通过水平扩展和分布式部署满足从原型到生产环境的需求,具备高可用性、容错能力及动态资源调整能力。
- 提供RESTful API、GraphQL API及多语言客户端(Python、JavaScript、Java、Go等),与TensorFlow、PyTorch等AI框架及Apache Spark等数据处理工具无缝集成。
多模态数据支持
- 处理文本、图像、音频等多种数据类型,通过BERT、ResNet等模型生成向量,支持跨模态检索(如图像-文本联合搜索)。
- 允许为向量附加元数据(如标签、时间戳),增强数据管理的灵活性和查询精度。
模块化与可扩展性
- 模块化架构支持集成文本向量化、图像向量化、生成式AI等模型,用户可自定义schema定义数据结构和关系。
- 支持实时数据更新、持久化存储、备份恢复及SSL/TLS加密、身份验证等安全功能。
1.2 典型应用场景
智能推荐系统
- 结合用户行为向量(如点击、购买历史)与内容向量(如商品描述、图像),实现个性化商品、音乐或视频推荐,提升点击率和转化率。
语义搜索引擎
- 在文档、图像或视频库中实现基于语义的搜索,例如企业内部知识库的语义检索、法律文档的相似案例匹配,或社交媒体内容的情感分析
知识图谱构建
- 将数据以图谱形式组织,存储实体关系(如员工-项目关联),支持复杂关系查询和推理,应用于企业知识管理、生物信息学分子结构分析、学术文献关系挖掘等。
对话式AI与长期记忆
- 存储聊天机器人对话历史,支持上下文理解和长期记忆,提升对话连贯性;结合大语言模型(如LLM)实现知识库问答和检索增强生成(RAG)。
异常检测与威胁分析
- 通过向量相似性分析识别异常数据点,应用于网络安全威胁检测、金融欺诈识别、设备故障预测等场景。
多模态内容分析
- 处理跨模态数据(如文本+图像+音频),支持社交媒体内容的多模态情感分析、视频内容的语义标签生成,或生物医学中的基因序列相似性搜索。
代码库检索与自动化开发
- 于语义的代码片段检索,辅助代码复用和自动化开发流程,提升开发效率。
1.3 同产品对比
- 与Milvus对比:Weaviate在混合搜索和模块化设计上更优,适合复杂查询场景;Milvus在大规模数据集和GPU加速场景表现更佳。
- 与Pinecone对比:Weaviate提供自托管选项,适合数据隐私敏感场景;Pinecone作为全托管服务更易用但成本较高。
- 与Chroma对比:Weaviate在生产级稳定性和企业级功能支持上更强,适合大规模应用;Chroma适合快速原型开发和小规模项目。
1.4 Weaviate端口说明
|
端口号
|
用途
|
配置示例说明
|
注意事项
|
|
8080
|
HTTP/REST API & GraphQL入口,支持数据CRUD、语义搜索、混合查询及元数据操作
|
ocker映射:-p 8080:8080;
Python客户端默认连接http://localhost:8080,API路径为/v1;
可修改config.local-development.yaml中network.http.port
|
生产环境建议限制内网IP访问,避免端口冲突
|
|
50051
|
gRPC API高性能通信接口,支持批量数据传输、流式处理及复杂模型集成
|
Docker映射:-p 50051:50051;
可调整为network.grpc.port: 50052避免冲突
|
需启用TLS加密,生产环境建议使用专用网络隔离
|
|
2112
|
集群通信(Raft协议),用于节点共识、状态同步及故障转移,保障高可用性
|
集群配置:cluster.raft.port: 2112;需通过防火墙/云安全组限制访问来源(如AWS允许10.0.0.0/16)
|
生产环境需配置副本数≥3,确保数据一致性
|
|
7100
|
集群节点发现与健康检查(高可用场景)
|
Docker多节点部署配置:CLUSTER_GOSSIP_BIND_PORT=7100;用于节点间状态同步与故障检测
|
仅在集群模式下启用,需配合Raft协议端口(如2112)使用;生产环境建议设置专用网络隔离
|
|
7101
|
集群节点数据同步端口
|
Docker多节点部署配置:CLUSTER_DATA_BIND_PORT=7101;用于节点间数据同步
|
二、Weaviate部署
2.1 部署环境
docker版本:Docker version 29.2.0, build 0b9d198
docker-compose版本:Docker Compose version v5.0.2
使用主要组件镜像版本为:
weaviate:semitechnologies/weaviate:1.35.3
2.2 导入所需镜像文件
docker load -i weaviate-1.35.3.tar
2.3 编写Weaviate部署使用的docker-compose.yml文件
编辑docker-compose.yaml内容
version: '3.5'
services:
weaviate:
container_name: weaviate #容器名称
image: semitechnologies/weaviate:1.35.3
ports:
- "8080:8080"
environment:
QUERY_DEFAULTS_LIMIT: 20
#明确启用匿名访问,禁用其他认证方式
AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
PERSISTENCE_DATA_PATH: "/var/lib/weaviate"
DEFAULT_VECTORIZER_MODULE: "none"
#如果不需要使用 Weaviate 的向量化模块,可以禁用
ENABLE_MODULES: ""
#节点唯一名称
CLUSTER_HOSTNAME: "node1"
volumes:
- ${DOCKER_VOLUME_DIRECTORY:-.}/weaviate_data:/var/lib/weaviate
restart: on-failure:0
networks:
- weaviate-net
networks:
weaviate-net:
2.4 创建Weaviate部署目录并启动服务
mkdir Weaviate
mv docker-compose.yml ./Weaviate
#启动服务
docker-compose up -d
2.5 验证服务状态
访问 http://127.0.0.1:8080/v1 返回应答数据
2.6 集群环境配置
本例演示单机伪集群模式,参考以下内容可部署多机集群模式。根据实际IP配置将node1、node2、node3替换为对应的IP。
version: '3.5'
services:
weaviate-node1:
container_name: weaviate-node1 #容器名称
image: semitechnologies/weaviate:1.35.3
ports:
- "8180:8080"
- "50151:50051"
- "7101:7100"
environment:
QUERY_DEFAULTS_LIMIT: 20
#明确启用匿名访问,禁用其他认证方式
AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
PERSISTENCE_DATA_PATH: "/var/lib/weaviate"
DEFAULT_VECTORIZER_MODULE: "none"
#如果不需要使用 Weaviate 的向量化模块,可以禁用
ENABLE_MODULES: ""
#节点唯一名称
CLUSTER_HOSTNAME: "node1"
#节点间通信端口
CLUSTER_GOSSIP_BIND_PORT: '7100'
#节点数据同步端口
CLUSTER_DATA_BIND_PORT: '7101'
#加入集群的其他节点
CLUSTER_JOIN: 'node1:7100,node2:7100,node3:7100'
volumes:
- ${DOCKER_VOLUME_DIRECTORY:-.}/weaviate_data1:/var/lib/weaviate
restart: on-failure:0
networks:
- weaviate-net-cluster
weaviate-node2:
container_name: weaviate-node2 #容器名称
image: semitechnologies/weaviate:1.35.3
ports:
- "8280:8080"
- "50251:50051"
- "7102:7100"
environment:
QUERY_DEFAULTS_LIMIT: 20
#明确启用匿名访问,禁用其他认证方式
AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
PERSISTENCE_DATA_PATH: "/var/lib/weaviate"
DEFAULT_VECTORIZER_MODULE: "none"
#如果不需要使用 Weaviate 的向量化模块,可以禁用
ENABLE_MODULES: ""
#节点唯一名称
CLUSTER_HOSTNAME: "node2"
#节点间通信端口
CLUSTER_GOSSIP_BIND_PORT: '7100'
#节点数据同步端口
CLUSTER_DATA_BIND_PORT: '7101'
#加入集群的其他节点
CLUSTER_JOIN: 'node1:7100,node2:7100,node3:7100'
volumes:
- ${DOCKER_VOLUME_DIRECTORY:-.}/weaviate_data2:/var/lib/weaviate
restart: on-failure:0
networks:
- weaviate-net-cluster
weaviate-node3:
container_name: weaviate-node3 #容器名称
image: semitechnologies/weaviate:1.35.3
ports:
- "8380:8080"
- "50351:50051"
- "7103:7100"
environment:
QUERY_DEFAULTS_LIMIT: 20
#明确启用匿名访问,禁用其他认证方式
AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
PERSISTENCE_DATA_PATH: "/var/lib/weaviate"
DEFAULT_VECTORIZER_MODULE: "none"
#如果不需要使用 Weaviate 的向量化模块,可以禁用
ENABLE_MODULES: ""
#节点唯一名称
CLUSTER_HOSTNAME: "node3"
#节点间通信端口
CLUSTER_GOSSIP_BIND_PORT: '7100'
#节点数据同步端口
CLUSTER_DATA_BIND_PORT: '7101'
#加入集群的其他节点
CLUSTER_JOIN: 'node1:7100,node2:7100,node3:7100'
volumes:
- ${DOCKER_VOLUME_DIRECTORY:-.}/weaviate_data3:/var/lib/weaviate
restart: on-failure:0
networks:
- weaviate-net-cluster
networks:
weaviate-net-cluster:
检查服务状态 docker-compose ps
更多推荐
所有评论(0)