首页 > 其他分享 >surrealdb 试用

surrealdb 试用

时间:2023-12-01 12:02:04浏览次数:43  
标签:console log database demo db 试用 surrealdb

surrealdb 是一个很不错的多模数据库,以下是一个简单试用

环境准备

基于docker-compose

  • docker-compose 文件
    添加了本地存储
 
version: "3"
services:
    db:
       image: surrealdb/surrealdb:latest
       command: start  --log trace --user root --pass root  file:///var/lib/surrealdb/mydatabase.db
       volumes:
         - ./db/mydatabase.db:/var/lib/surrealdb/mydatabase.db
       ports:
       - "8000:8000"

代码集成

基于了nodejs,使用了nodejs 的js client 以及webassembly 的client

  • app.mjs
import { Surreal } from 'surrealdb.js';
 
const db = new Surreal({
    onClose: () => {
        console.log("CLOSED")
    },
    one rror: (e) => {
        console.log("ERROR",e)
    },
    onConnect: () => {
        console.log("CONNECTED")
    },
}
);
 
async function main() {
    try {
        // Connect to the database
        await db.connect('http://127.0.0.1:8000/rpc', {
            // Set the namespace and database for the connection
            // Set the authentication details for the connection
            namespace: 'demo',
            database: 'demo',
            auth: {
                username: 'root',
                password: 'root',
                namespace: 'demo',
                database: 'demo',
            },
        });
        // Create a new person with a random id
        const created = await db.create('person', {
            title: 'Founder & CEO',
            name: {
                first: 'Tobie',
                last: 'Morgan Hitchcock',
            },
            marketing: true,
            identifier: Math.random().toString(36).substr(2, 10),
        });
 
        for (let index = 0; index < 10; index++) {
            const updated = await db.merge('person:jaime', {
                marketing: true,
                identifier: Math.random().toString(36).substr(2, 10)
            });
 
        }
        // Update a person record with a specific id
   
    } catch (e) {
        console.error('ERROR', e);
    }
}
 
main();
  • demo.mjs
    一个client 实现live 查询
 
import { Surreal } from 'surrealdb.js';
 
const db = new Surreal({
    onClose: () => {
        console.log("CLOSED")
    },
    one rror: (e) => {
        console.log("ERROR",e)
    },
    onConnect: () => {
        console.log("CONNECTED")
    },
});
 
async function main() {
    try {
        // Connect to the database
        await db.connect('http://127.0.0.1:8000/rpc', {
            // Set the namespace and database for the connection
            // Set the authentication details for the connection
            namespace: 'demo',
            database: 'demo',
            auth: {
                username: 'root',
                password: 'root',
                namespace: 'demo',
                database: 'demo',
            },
        });
 
        // Select all people records
        const queryUuid = await db.live(
            "person",
            // The callback function takes an object with the "action" and "result" properties
            ({ action, result }) => {
                // action can be: "CREATE", "UPDATE", "DELETE" or "CLOSE"
                if (action === "CLOSE") return;
 
                // result contains either the entire record, or a set of JSON patches when diff mode is enabled
                console.log(result,action)
            }
        )
 
    } catch (e) {
        console.error('ERROR', e);
    }
}
 
main();
  • wasm.mjs
import { Surreal } from 'surrealdb.wasm';
 
const db = new Surreal({
    onClose: () => {
        console.log("CLOSED")
    },
    one rror: (e) => {
        console.log("ERROR",e)
    },
    onConnect: () => {
        console.log("CONNECTED")
    },
});
 
async function main() {
    try {
        // Connect to the database
        await db.connect('http://127.0.0.1:8000');
 
        await db.signin({
            username: "root",
            password: "root",
        });
 
        // Select a specific namespace / database
        await db.use({ ns: "demo", db: "demo" });
   
        // Select all people records
        let people = await db.select("person");
        console.log(people);
 
    } catch (e) {
        console.error('ERROR', e);
    }
}
 
main();
  • 效果

说明

目前webassembly 模式不支持live 查询,而且目前webassembly 的代码与js 的还是有一些区别的,开发上基于了rust 模块,使用了wasm_bindgen
surrealdb 这个项目还是比较有意思的,很值得看看

参考资料

https://github.com/surrealdb/surrealdb.wasm
https://surrealdb.com/
https://github.com/surrealdb/surrealdb
https://github.com/rustwasm/wasm-bindgen

标签:console,log,database,demo,db,试用,surrealdb
From: https://www.cnblogs.com/rongfengliang/p/17869398.html

相关文章

  • cmake Ninja 集成试用
    核心比较简单就是添加Ninja的依赖工具,然后再构建的时候指定生成器为Ninja使用安装ninja我使用的mac系统 brewinstallninja生成前提是已经有了一个CMakeLists.tx同时还没有初始化 cmake-GNinja..效果 构建比较快 cmake--build.效果├──CMakeCache.txt├──......
  • 关键字 开发-06 封装yaml文件直接生成测试用例
    前言前面几个章节,我们主要是如何通过yaml文件的数据自动转换成测试用例,并按照关键字去执行,如下是之前我们通过参数化的形式手动执行用例。fromutils.runimportRunByKey#获取文件路径file_path=Path(__file__).parent.joinpath('data','login.yml')@pytest.mark.para......
  • 软件测试/人工智能|基于录制的接口测试用例自动生成技术探究
    导言在现代软件开发中,接口测试是确保系统功能和性能的关键步骤。然而,手动编写接口测试用例往往耗费大量时间和资源。基于录制的接口测试用例自动生成技术通过简化这个流程,显著提高了测试效率和准确性。录制接口测试用例自动生成技术简介录制接口测试用例自动生成技术允许开发......
  • 软件测试/人工智能|使用 GraphWalker 实现自动化测试用例生成
    导言在软件开发中,测试是确保代码质量和稳定性的关键步骤之一。而自动生成测试用例可以大大提高测试效率和覆盖率。GraphWalker是一个基于模型的测试工具,能够帮助开发者通过定义和遍历图模型来自动生成高质量的测试用例。GraphWalker简介GraphWalker是一个开源的测试工具,它......
  • 接口自动化测试用例的设计
     做接口自动化的前提,需设计接口自动化测试用例--设计接口自动化测试用例的前提:如下一、搞清接口测试的目的: 二、搞清接口测试的优先级:三、搞清接口测试的业务逻辑和应用场景1、单接口场景的测试---如:登录2、依赖接口场景的测试---如:需先登录获取token,方能进行后续接口的......
  • 普通人试用期被解除合同(双倍赔偿金经验分享)
    楼主是一名Java工程师,工作经验六年。事情是这样的:楼主入职一家深圳的外包公司,被安排在重庆甲方工作。在离试用期还有5天的时候,外包公司已试用期不通过为由于我解除劳动合同。在收到“终止(解除)劳动合同通知”后就没有去甲方公司工作了。后面休息了一周,然后有经历了就开始准备走......
  • mupdf webassembly 试用
    mupdf是基于c++编写的pdf读写以及预览工具,同时也提供了sdk,官方基于emscripten开发了一个webassembly的扩展参考使用 constfs=require("fs")constmupdf=require("mupdf")letdata=fs.readFileSync("demo.pdf")letdoc=mupdf.Document.openDoc......
  • 2023-11-27 记录react拖拽组件——react-draggable试用方法
    安装:yarnaddreact-draggable注:如果你用npm安装失败可以尝试使用yarm,我就是npmi react-draggable报错了,用yarn装才好普通使用://引入importDraggablefrom'react-draggable';constDraggableCore:any=Draggable;//使用<div><DraggableCore><div>666&l......
  • 4款优质国产办公软件,支持内网环境使用,可免费试用
    在现代社会中,办公软件已成为企业必不可少的工具之一。与此同时,随着信息安全和数据保护意识的提升,越来越多的企业开始关注是否有适用于内网环境的国产办公软件。今天给大家分享4款优质国产办公软件,它们不仅支持内网环境使用,还可免费试用,帮助企业提高办公效率。01、小鱼易连(视频会议......
  • 龙芯发布 .NET 8 SDK 8.0.100-ea1(试用版)
    随着.NET8的发布,国内的社区朋友们也很关心龙芯.NET团队对于Loongarch.NET8的发布时间,目前从龙芯.NET编译器团队已经在龙芯.NET官网上发布龙芯.NET8SDK-8.0.100-ea1版本发布(试用版),从龙芯2019年启动.NET的研发工作,2022年完成了LoongArch64架构代码合并到.NET社区主干分......