SurrealDB
SurrealDB is an end-to-end cloud-native database designed for modern applications, including web, mobile, serverless, Jamstack, backend, and traditional applications. With SurrealDB, you can simplify your database and API infrastructure, reduce development time, and build secure, performant apps quickly and cost-effectively.
Key features of SurrealDB include:
- Reduces development time: SurrealDB simplifies your database and API stack by removing the need for most server-side components, allowing you to build secure, performant apps faster and cheaper.
- Real-time collaborative API backend service: SurrealDB functions as both a database and an API backend service, enabling real-time collaboration.
- Support for multiple querying languages: SurrealDB supports SQL querying from client devices, GraphQL, ACID transactions, WebSocket connections, structured and unstructured data, graph querying, full-text indexing, and geospatial querying.
- Granular access control: SurrealDB provides row-level permissions-based access control, giving you the ability to manage data access with precision.
View the features, the latest releases, and documentation.
This notebook shows how to use functionality related to the SurrealDBStore
.
Setup​
Uncomment the below cells to install surrealdb.
# %pip install --upgrade --quiet surrealdb langchain langchain-community
Using SurrealDBStore​
# add this import for running in jupyter notebook
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)
model_name = "sentence-transformers/all-mpnet-base-v2"
embeddings = HuggingFaceEmbeddings(model_name=model_name)
Creating a SurrealDBStore object​
db = SurrealDBStore(
dburl="ws://localhost:8000/rpc", # url for the hosted SurrealDB database
embedding_function=embeddings,
db_user="root", # SurrealDB credentials if needed: db username
db_pass="root", # SurrealDB credentials if needed: db password
# ns="langchain", # namespace to use for vectorstore
# db="database", # database to use for vectorstore
# collection="documents", #collection to use for vectorstore
)
# this is needed to initialize the underlying async library for SurrealDB
await db.initialize()
# delete all existing documents from the vectorstore collection
await db.adelete()
# add documents to the vectorstore
ids = await db.aadd_documents(docs)
# document ids of the added documents
ids[:5]
['documents:38hz49bv1p58f5lrvrdc',
'documents:niayw63vzwm2vcbh6w2s',
'documents:it1fa3ktplbuye43n0ch',
'documents:il8f7vgbbp9tywmsn98c',
'documents:vza4c6cqje0avqd58gal']