一个轻量级Java嵌入式数据库——QuickIO
QuickIO 是什么?
QuickIO 是一个Java嵌入式数据库。底层基于 LevelDB 引擎和 Java NIO 设计,使用 Protostuff 序列化/反序列化数据。支持存储文档、key-value、文件类型的数据。直接使用 Java 代码操作数据库,简单高效。
QuickIO 设计开发的初衷是以简单、优雅的方式,解决小型单机或嵌入式 Java 项目存储数据繁琐的问题。它具备 NoSQL 和嵌入式数据库的优点、功能丰富,可替代 Java 原生的文件读写功能。
本文对 QuickIO 作一个基础的介绍,但读者想了解更详细内容,可查看 GitHub。
(资料图片仅供参考)
开源地址:https://github.com/artbits/quickio
QuickIO 特性
像 SQLite 一样的嵌入式数据库,不需要安装,不需要独立进程。像 MongoDB 或 Diskv 一样的 NoSQL 数据库,使用十分简单。支持存储文档、key-value、文件类型的数据。支持唯一索引,以满足快速查询的要求。简易的 API,使用 Java lambda 表达式优雅操作。读写快速,满足中小型数据量的使用场景。QuickIO 安装
Gradle:
repositories { maven { url "https://www.jitpack.io" }}dependencies { implementation "com.github.artbits:quickio:1.3.0"}
Maven:
jitpack.io https://www.jitpack.io com.github.artbits quickio 1.3.0
QuickIO 使用
存储文档类型的数据。Document 对象与 Map 对象用法相似,可存放任意类型的数据;查找数据时,以 lambda 表达式编写条件的方式查询,与 Java stream 操作相似。
try(DB db = QuickIO.usingDB("example_db")) { Collection collection = db.collection(Document.class); collection.save(new Document().put("city", "Canton").put("area", 7434.4)); Document document = collection.findOne(d -> "Canton".equals(d.get("city"))); Optional.ofNullable(document).ifPresent(IOEntity::printJson);}
自定义实体类,按文档类型的数据进行存储。实体类继承IOEntity
类,相当于 ORM 框架的实体类与数据表之间建立映射关系。此时,可通过 lambda 表达式直接操作实体类的字段,完成增删改查操作。
public class Book extends IOEntity { public String name; public String author; public Double price; public static Book of(Consumer consumer) { Book book = new Book(); consumer.accept(book); return book; }}try(DB db = QuickIO.usingDB("example_db")) { Collection collection = db.collection(Book.class); collection.save(Book.of(b -> { b.name = "On java 8"; b.author = "Bruce Eckel"; b.price = 129.8; })); List books = collection.findAll(); books.forEach(IOEntity::printJson);}
存储 Key-Value 类型的数据,支持任意可序列化和反序列化的 key 和 value。KV 对象提供写入、读取、擦除、包含(contains)的操作功能。
try(KV kv = QuickIO.usingKV("example_kv")) { kv.write("Pi", 3.14); kv.write(3.14, "Pi"); double d = kv.read("Pi", Double.class); String s = kv.read(3.14, String.class); QuickIO.println("%s = %f", s, d);}
存储文件类型的数据。该功能的设计灵感来源于服务端的对象存储,让 Tin 可以像 Bucket 操作方式一样,在嵌入式程序中管理文件。把文件放入 Tin 中并设置唯一名称后,即可通过唯一名称进行文件的获取、移除。
try(Tin tin = QuickIO.usingTin("example_tin")) { tin.put("photo.png", new File("...")); File file = tin.get("photo.png"); Optional.ofNullable(file).ifPresent(f -> QuickIO.println(f.getPath()));}
以上,是对 QuickIO 三种数据存储方式的基础介绍,更详细的功能使用,可查阅 GitHub 的相关示例代码。此外,QuickIO 还提供一些工具类 api 功能,例如与打印到操控台、创建唯一ID、序列化、JSON 等相关的功能,通过QuickIO
类的静态方法即可调用。
结语
本文到此结束,作者的阅历尚浅,还希望与大家一起交流、学习和探讨。
标签: Java 文件存储 Serverless
为您推荐
广告
- 一个轻量级Java嵌入式数据库——QuickIO
- 梵蓬村
- 当前报道:天妃_关于天妃的介绍
- 今日起,河北公安交管部门开展“春季守护行动”
- 每日视讯:杜牧最有名的20首诗昨夜洞房昨夜停红烛李商隐无题
- 西游记乌鸡国国王_西游记乌鸡国 世界热消息
- 周三(3月1日)纽约尾盘,ICE美元指数下跌0.45%,报104.402点,日内交投区间为105.087-104.094点 关注
- 2018 考研英语 焦点速递
- 如何解决Linux磁盘乱序的问题_天天快资讯
- 晶科科技: 第二届监事会第二十八次会议决议公告-全球实时
- 百色市澄碧河水库管理中心推动大水面生态渔业“绿水生金”
- 对不起,英文怎么写_英文对不起怎么写的|快播报
- 2023北京消费券官方领券入口
- 天天头条:ST森源:公司充电设备电压目前已支持1000V高压平台 快充功率为120kW-720kW
- 中国化学:公司生产出的气凝胶主要应用于工业保温类项目 包括煤化工、石油、石化、多晶硅等化工项目
- 怎样测试鼠标定位是否精准_鼠标引擎定位更精准的有哪些-每日热闻
- 央视频2023内蒙古开学第一课在哪看?(附直播入口)
- 贵阳市教育局:禁止提前招生,严格执行"五个严禁"
- 惠普笔记本无线网卡开关在哪里打开_惠普笔记本电脑无线网卡开关在哪里
- 焦点热门:iPhone13用户准备等618换小米13,你们说小米13到618会跳水吗?
广告
- 国行三星Galaxy Watch手表ECG功能通过审批
- 长沙技能提升补贴需要缴纳几个月保险?
- 海底两万里好词500个好句作业帮_海底两万里好词200个_环球快报
- 鸣沙山|短讯
- 【世界速看料】直-20女飞行员徐枫灿,有了新身份
- 天天观点:花季不再来
- 焦点热讯:不婚男
- 天天微动态丨怎样判断玫瑰是否新鲜 如何判断玫瑰是否新鲜
- 最资讯丨发现自己长老年斑?别急,试试常吃这些食物!
- 观天下!丛生竹组培苗大棚速培技术示范
- 焦点热文:一老人疑因男生未主动让座将其骂哭 目击者:他之前还动手打了男生……
- 47岁丘索维金娜再获世界杯铜牌,将向杭州亚运会发起冲击
- 【天天热闻】东马社区3组
- 当前速讯:郑眼看盘丨美通胀顽固,全球股市大概率承压
- 天天时讯:高原馒头蒸箱_高原如何做馒头才更加松软
- 郭子光
- 太监最不愿意给妃子做这件事,妃子一动不动,但太监却很难受 全球热资讯
- 今日要闻!中国接骨图说
- 当前视点!溏心风暴续_关于溏心风暴续介绍
- 耶组词组_耶组词 天天微速讯