手写一个简易版数据库!项目经验稳了
共 3192字,需浏览 7分钟
·
2022-08-26 15:30
近期文章精选 :
这是 JavaGuide 的「优质开源项目推荐」第 11 期,每一期我都会精选 5 个高质量的 Java 开源项目。
前 10 期的「优质开源项目推荐」传送门:
一款基于 Spring Boot + Vue 的一站式开源持续测试平台。 用 Java 写个沙盒塔防游戏!已上架 Steam,Apple Store 一款基于 Java 的可视化 HTTP API 接口开发神器 一款对业务代码无侵入的可视化 Java 进程管理平台 一个比 Spring 更轻量级的 Web 框架!!!微软、红帽都在用 轻量!Google 开源了一个简易版 Spring ! 一款跨时代的高性能 Java 框架!启动速度快到飞起 Spring Boot+MyBatis Plus+JWT 问卷系统!开源! 手写一个简化版的 Spring Cloud! 这个 SpringBoot+ Vue 开源博客系统太酷炫了!
你可以通过 awesome-java (非常棒的 Java 开源项目集合,找 Java 项目必备)找到更多优质的 Java 开源项目。
Github 地址:https://github.com/CodingDocs/awesome-java Gitee 地址:https://gitee.com/SnailClimb/awesome-java 在线阅读:https://javaguide.cn/open-source-project/
MYDB:一个 Java 实现的简单的数据库
MYDB 是一个 Java 语言实现的简易版数据库,部分原理参照自 MySQL、PostgreSQL 和 SQLite。
麻雀虽小,五脏俱全。MYDB 目前已经实现 MVCC、两种事务隔离级别(读提交和可重复读)、死锁处理、简陋的 SQL 解析等关系型数据库的核心功能。
并且,MYDB 作者写了详细的实现教程,教程地址:https://ziyang.moe/cs/project/mydb/
Github 地址:https://github.com/CN-GuoZiyang/MYDB
ip2region:离线 IP 地址定位库
ip2region 是一个高性能离线 IP 地址定位库,10 微秒级别的查询效率,开箱即用,提供了多种主流编程语言(如 Go,Java,Python)的 xdb 数据生成和查询客户端 API。
通过 ip 地址可以通过自治系统(Autonomous System)找到该 ip 对应的具体地址,这样就可以轻松实现网站用户 ip 归属地类似的功能。
Gitee:https://gitee.com/lionsoul/ip2region GitHub:https://github.com/lionsoul2014/ip2region
另外,mica-ip2region 这个项目是对这个项目的 stater 封装,目的是方便 Spring Boot 项目使用。
Gitee:https://gitee.com/lionsoul/ip2region 官方文档:https://www.dreamlu.net/components/mica-ip2region.html
compileflow:轻量级流程引擎
一个轻量、高性能、可集成、可扩展的流程引擎,淘宝工作流TBBPM
引擎之一。
compileflow 专注于纯内存执行,无状态的流程引擎,通过将流程文件转换生成java
代码编译执行,简洁高效。当前是阿里业务中台交易等多个核心系统的流程引擎。
Github :https://github.com/alibaba/compileflow 。 官方 Demo : https://github.com/compileflow/compileflow-demo 。 基于 IntelliJ IDEA 流程可视化插件 : https://github.com/alibaba/compileflow-idea-designer
CompreFace:免费开源的人脸识别服务
CompreFace 是一个免费开源的人脸识别服务,开箱即用,不需要机器学习技能!
本质上来说,它就是一个基于 Docker 的应用程序,可以用作独立服务器或部署在云中。
Github:https://github.com/exadel-inc/CompreFace 官网:https://exadel.com/solutions/compreface/
transmittable-thread-local:定制化的 ThreadLocal
transmittable-thread-local(TTL) 基于 InheritableThreadLocal
,你可以将其看做是定制化的 ThreadLocal
,主要用于复用线程场景(比如线程池)下解决异步执行时上下文传递的问题(比如线程池中获取 ThreadLocal
中的数据)。
ThreadLocal
的需求场景即是 transmittable-thread-local
的潜在需求场景。下面是几个典型场景例子:
分布式跟踪系统 或 全链路压测(即链路打标) 日志收集记录系统上下文 Session
级Cache
应用容器或上层框架跨应用代码给下层 SDK
传递信息
Github 地址:https://github.com/alibaba/transmittable-thread-local 。
下面是 TTL 官方的一些资料:
TTL 需求场景说明[1] TTL 实际业务使用场景与设计实现解析[2]
再推荐几篇文章帮助大家理解 TTL 的原理和设计思想:
微服务中使用阿里开源的 TTL,优雅的实现身份信息的线程间复用 通过 transmittable-thread-local 源码理解线程池线程本地变量传递的原理[3] 如何在子线程和线程池中使用 ThreadLocal 传输上下文[4]
参考资料
TTL 需求场景说明: https://github.com/alibaba/transmittable-thread-local/blob/master/docs/requirement-scenario.md
[2]TTL 实际业务使用场景与设计实现解析: https://github.com/alibaba/transmittable-thread-local/issues/123
[3]通过 transmittable-thread-local 源码理解线程池线程本地变量传递的原理: https://www.cnblogs.com/throwable/p/12817754.html
[4]如何在子线程和线程池中使用 ThreadLocal 传输上下文: https://www.jianshu.com/p/4093add7f2cd
·········· END ··············
👉 专属专栏/一对一提问/简历修改/学习打卡/读书活动,欢迎加入 JavaGuide 知识星球。目前已经 1.3w人加入,即将调整价格。
推荐阅读 :
👉如果本文对你有帮助的话,欢迎 点赞&在看&分享 ,这对我继续分享&创作优质文章非常重要。非常感谢!