【大家的项目】Rbatis - 制作 Rust 语言堪比 Mybatis 的异步 ORM 框架

2024-06-23 00:18

本文主要是介绍【大家的项目】Rbatis - 制作 Rust 语言堪比 Mybatis 的异步 ORM 框架,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

因为是复刻Java系的Mybatis,因此框架暂命名 Rbatis。小部分功能还在进行中。github链接https://github.com/rbatis/rbatis

首先介绍下rust语言下牛逼哄哄的产品有哪些?(最近风靡前端的原nodejs大神实现的TypeScript运行时Deno估计要替代nodejs,后端分布式raft协议实现的数据库的Tidb,火狐浏览器等等....)

经过被Rust编译器吊打和放弃一段时间之后,笔者立志要自虐写一款没有GC压力,高并发且稳定安全的ORM框架。为啥?因为可以保证只要代码编译通过,线上即没bug,rust编译器就好比一位超级大神监督着你敲代码,不会让你有任何空指针异常,并发死锁异常,GC异常.....emmm

读者如果想阅读源代码,必须了解Rust涉及到的基本语法,Rc,Arc,RefCell,Mutex锁,RwLock锁,Send,Sync接口,Rust1.9之后加入的Future接口,Pin,Box。

首先写rust的ORM框架需要解决几个关键问题

  • 1 框架必须支持异步(future), 想象一下,假设我们执行N多条慢sql,那么很有可能耗尽线程池资源造成等待。因为协程或者说纤程只消耗几kb而且可以启动成百上千甚至上万条,并发更高。

  • 为了节省时间,支持future网络部分拷贝sqlx-core(注意sqlx框架大量使用宏 ,近乎偏执的使用编译期生成代码,这导致代码智能提示基本不起作用,这不是我想要的)部分基础的网络实现代码。

  • 因为Rust语言本身中立,可以选择例如Tokio(Actor模型),Async_Std(Actor模型),may(CSP模型和go类似,但其作者使用了固定容量的栈内存空间,有可能造成内存溢出,笔者暂时不考虑它。如果未来他能解决的话...)。考虑到框架必须尽可能低开销,高并发

这篇关于【大家的项目】Rbatis - 制作 Rust 语言堪比 Mybatis 的异步 ORM 框架的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1085814

相关文章

C语言进阶(预处理命令详解)

《C语言进阶(预处理命令详解)》文章讲解了宏定义规范、头文件包含方式及条件编译应用,强调带参宏需加括号避免计算错误,头文件应声明函数原型以便主函数调用,条件编译通过宏定义控制代码编译,适用于测试与模块... 目录1.宏定义1.1不带参宏1.2带参宏2.头文件的包含2.1头文件中的内容2.2工程结构3.条件编

MyBatis-Plus 自动赋值实体字段最佳实践指南

《MyBatis-Plus自动赋值实体字段最佳实践指南》MyBatis-Plus通过@TableField注解与填充策略,实现时间戳、用户信息、逻辑删除等字段的自动填充,减少手动赋值,提升开发效率与... 目录1. MyBATis-Plus 自动赋值概述1.1 适用场景1.2 自动填充的原理1.3 填充策略

Go语言并发之通知退出机制的实现

《Go语言并发之通知退出机制的实现》本文主要介绍了Go语言并发之通知退出机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、通知退出机制1.1 进程/main函数退出1.2 通过channel退出1.3 通过cont

Python Web框架Flask、Streamlit、FastAPI示例详解

《PythonWeb框架Flask、Streamlit、FastAPI示例详解》本文对比分析了Flask、Streamlit和FastAPI三大PythonWeb框架:Flask轻量灵活适合传统应用... 目录概述Flask详解Flask简介安装和基础配置核心概念路由和视图模板系统数据库集成实际示例Stre

mybatis中resultMap的association及collectio的使用详解

《mybatis中resultMap的association及collectio的使用详解》MyBatis的resultMap定义数据库结果到Java对象的映射规则,包含id、type等属性,子元素需... 目录1.reusltmap的说明2.association的使用3.collection的使用4.总

如何在Java Spring实现异步执行(详细篇)

《如何在JavaSpring实现异步执行(详细篇)》Spring框架通过@Async、Executor等实现异步执行,提升系统性能与响应速度,支持自定义线程池管理并发,本文给大家介绍如何在Sprin... 目录前言1. 使用 @Async 实现异步执行1.1 启用异步执行支持1.2 创建异步方法1.3 调用

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

mybatis-plus QueryWrapper中or,and的使用及说明

《mybatis-plusQueryWrapper中or,and的使用及说明》使用MyBatisPlusQueryWrapper时,因同时添加角色权限固定条件和多字段模糊查询导致数据异常展示,排查发... 目录QueryWrapper中or,and使用列表中还要同时模糊查询多个字段经过排查这就导致只要whe

Olingo分析和实践之OData框架核心组件初始化(关键步骤)

《Olingo分析和实践之OData框架核心组件初始化(关键步骤)》ODataSpringBootService通过初始化OData实例和服务元数据,构建框架核心能力与数据模型结构,实现序列化、URI... 目录概述第一步:OData实例创建1.1 OData.newInstance() 详细分析1.1.1