技术背景介绍
SurrealDB 是一款端到端的云原生数据库,旨在为现代应用程序(包括 Web、移动、无服务器、Jamstack、后端和传统应用)提供支持。通过 SurrealDB,您可以简化数据库和 API 基础设施,减少开发时间,并快速且低成本地构建安全且高性能的应用程序。
SurrealDB 的关键特性
- 减少开发时间:SurrealDB 通过移除大多数服务器端组件,简化您的数据库和 API 堆栈,使您能够更快更便宜地构建安全高效的应用程序。
- 实时协作 API 后端服务:SurrealDB 既是数据库也是 API 后端服务,支持实时协作。
- 支持多种查询语言:SurrealDB 支持从客户端设备进行 SQL 查询、GraphQL、ACID 事务、WebSocket 连接、结构化和非结构化数据、图查询、全文索引和地理空间查询。
- 细粒度访问控制:SurrealDB 提供基于行级权限的访问控制,使您可以精确管理数据访问。
核心原理解析
SurrealDBLoader 是一个用于从 SurrealDB 数据库返回 Langchain 文档列表的工具。它通过 WebSocket 连接到 SurrealDB,并支持多种查询和过滤选项。
参数解析
dburl
: WebSocket 端点的连接字符串(默认:ws://localhost:8000/rpc)ns
: 命名空间的名称(默认:langchain)db
: 数据库的名称(默认:database)table
: 表的名称(默认:documents)db_user
: 如果需要,SurrealDB 的用户名db_pass
: 如果需要,SurrealDB 的密码filter_criteria
: 用于构建 WHERE 子句的过滤条件(字典类型)
代码实现演示
以下是如何使用 SurrealDBLoader 的示例代码:
# 首先安装相关依赖包(在 Jupyter Notebook 中取消注释并运行)
# %pip install --upgrade --quiet surrealdb langchain langchain-community
# 为了在 Jupyter Notebook 中运行,需要引入 nest_asyncio
import nest_asyncio
nest_asyncio.apply()
import json
from langchain_community.document_loaders.surrealdb import SurrealDBLoader
# 使用 SurrealDB 连接和查询
loader = SurrealDBLoader(
dburl="ws://localhost:8000/rpc",
ns="langchain",
db="database",
table="documents",
db_user="root",
db_pass="root",
filter_criteria={},
)
# 加载文档数据
docs = loader.load()
# 查看文档数量
print(len(docs))
# 获取最后一个文档的元数据和内容
doc = docs[-1]
print(doc.metadata)
print(len(doc.page_content))
# 解析文档内容
page_content = json.loads(doc.page_content)
print(page_content["text"])
代码注释分析
- 使用
pip
安装必要的 Python 包。 - 为了在 Jupyter Notebook 环境中运行,需要使用
nest_asyncio
模块。 - 导入 SurrealDBLoader 模块,并配置连接参数,包括 WebSocket 端点地址、命名空间、数据库名、表名以及访问权限。
- 通过
loader.load()
方法加载文档,并获取文档数量。 - 查看最后一个文档的元数据和内容,解析并展示文档内容。
应用场景分析
SurrealDB 特别适用于以下应用场景:
- 实时协作应用:如协作编辑器、即时通讯应用等需要实时数据同步的场景。
- 无服务器和 Jamstack 应用:简化后端基础设施,降低运行成本。
- 复杂查询需求:通过支持多种查询语言和高级查询功能,满足复杂的数据查询和处理需求。
实践建议
- 选择合适的部署方式:根据您的应用场景和需求,可以选择在本地部署 SurrealDB 或使用云服务。
- 合理使用过滤条件:在大数据量场景下,合理构建
filter_criteria
以提高查询效率。 - 安全管理访问权限:利用 SurrealDB 的行级权限控制,确保数据的安全访问。
结束语:如果遇到问题欢迎在评论区交流。
—END—