在现代应用开发中,拥有一个功能强大且易于集成的数据库对于加速开发流程至关重要。SurrealDB 是一种专为现代应用设计的端到端云原生数据库,不仅具备高效的数据存储能力,还兼备实时协作的 API 后端服务。这篇文章将详细介绍 SurrealDB 的核心功能,并通过示例代码演示如何在应用中使用 SurrealDB 进行高效的向量存储操作。
技术背景介绍
SurrealDB 为现代应用(如网页、移动端、无服务架构、Jamstack等)提供了一种简化数据库和 API 基础设施的方式。它通过减少服务器端组件,帮助开发者大幅缩短开发时间,并且支持多种查询语言、实时数据协作、以及精细的访问控制。
核心原理解析
SurrealDB 的核心在于其同时作为数据库和 API 服务存在,使得应用可以进行实时数据交互,而无需额外的服务器端管理。它支持多种查询格式,包括 SQL、GraphQL,以及对 ACID 事务的支持,确保数据的一致性和完整性。
代码实现演示
以下是如何设置 SurrealDB 并使用其向量存储功能的代码示例:
import nest_asyncio
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import SurrealDBStore
from langchain_huggingface import HuggingFaceEmbeddings
from langchain_text_splitters import CharacterTextSplitter
nest_asyncio.apply() # 使 Jupyter notebook 兼容异步操作
# 加载文本并进行分块
documents = TextLoader("../../how_to/state_of_the_union.txt").load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
# 使用 HuggingFace 提供的嵌入模型
embeddings = HuggingFaceEmbeddings()
# 创建 SurrealDBStore 对象并初始化
db = SurrealDBStore(
dburl="ws://localhost:8000/rpc", # SurrealDB 数据库的 URL
embedding_function=embeddings,
db_user="root", # SurrealDB 用户名
db_pass="root" # SurrealDB 密码
)
# 初始化异步库
await db.initialize()
# 清空向量存储集合中的所有文档
await db.adelete()
# 将文档添加到向量存储中
ids = await db.aadd_documents(docs)
# 输出添加的文档 ID
print(ids[:5])
应用场景分析
SurrealDB 特别适用于需要实时数据交互的应用场景,例如协作编辑器、实时数据分析平台以及需要复杂数据查询的应用。其支持多种查询语言和实时数据同步能力,使开发者能够更灵活地构建功能丰富的应用。
实践建议
- 选择合适的查询语言:根据应用场景,选择 SurrealDB 支持的多种查询语言(如 SQL、GraphQL)以优化查询效率。
- 利用实时功能:充分利用 SurrealDB 的实时协作功能,提升应用的可用性和用户体验。
- 关注安全性:利用 SurrealDB 的行级权限控制确保数据安全,特别是在多用户协作应用中。
如果遇到问题欢迎在评论区交流。
—END—