java实现的非关系型数据库:nosqldb

news2024/11/25 20:44:44

nosqldb

  • 一、nosqldb介绍
  • 二、nosqldb功能介绍
  • 三、数据存储结构介绍
    • 1. 数据文件存储结构(data.nosqldb)
    • 2.索引文件存储结构(index.mbdb)
  • 三、优化点
    • 1. 不支持连表查询
    • 2. 不支持分片存储
    • 3. 碎片整理


一、nosqldb介绍

github地址 https://github.com/MaBo2420935619/nosqldb

nosqldb是一个用Java实现的基于文件存储的 非关系型数据库管理系统,由个人开发者mabo独立开发

nosqldb 将不同表的数据保存在不同的目录下,而不是将所有数据放在一个大仓库内,这样就增加了查询速度并提高了灵活性

image

每个表的目录下有2个文件:

  • data.nosqldb存储数据
  • index.nosqldb存储索引
    如下图所示
    image

二、nosqldb功能介绍

nosqldb无需对表结构进行定义,即无需创建表就可以进行数据库操作。
对表数据进行操作支持两种方式,一种是基于对象进行操作,一种是基于json格式的数据进行操作。
如下图所示对person表进行插入操作

  • 对象操作
 public static void insert() {
        Person zhangsan = new Person().setId("1").setName("zhangsan");
        NoSqlObjTemplate noSqlObjTemplate = new NoSqlObjTemplate();
        noSqlObjTemplate.insert(zhangsan);
    }
  • json操作
 		JSONArray array = new JSONArray();
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("id","2");
        jsonObject.put("msgid","6");
        array.add(jsonObject);
        TableService.insert("person",array,"id");

nosqldb支持增删改查操作,具体使用样例参考github中example

三、数据存储结构介绍

1. 数据文件存储结构(data.nosqldb)

如图所示,数据在文件中以json字符串进行存储,读取的时候在转化为对象或者json进行使用
并且该数据库支持批量存储
在这里插入图片描述

2.索引文件存储结构(index.mbdb)

索引文件一条数据存储了三条数据用符号 | 进行分割,key存储数据的唯一id,position存储数据的指针,方便查询数据,表头的999008用于表示数据的数据量大小,因为查询数据采用二分法查询,所以需要记录数据的数据量。

在这里插入图片描述

三、优化点

1. 不支持连表查询

2. 不支持分片存储

目前数据库的的一张表数据都存储在同一张表中。
可以进行优化,当数据库文件大小超过一定大小时,将文件存储到不同文件中。当使用分片存储时,需要修改索引结构,增加分片编号,查询时根据索引中的分片编号选择文件进行查询。

3. 碎片整理

由于删除操作的存在,删除时为了保证其他数据的位置不发生变化,只是对当前行的数据进行空字符串替代,并没有进行行数据的移动操作。所以当大量数据被删除时,会导致数据库的文件中存在大量的空行。所以删除操作并不会使数据文件变小。所以最好时能进行数据库文件的定时碎片整理。重新整理后,重新生成数据库的索引。

目前该数据库还在使用测试阶段,并且github中提供了该数据库的所有源代码。
欢迎各位大佬提出意见和建议进行数据库优化升级!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2022年终总结2023年计划

目录 前言: 2022年总结: 工作上: 生活上: 2023年规划: 工作上: 生活上: 前言: 嗨,不知不觉一年又过去了,2022已经结束了,我们迎来了2023。…

c++ -- STL容器--list容器

7. list容器7.1 简介① 功能:将数据进行链式存储。② 链表(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的。③ 链表的组成:链表由一系列结点组成。④ 结点的组成:一个是存储数据元素…

serverless论文总结

1.Benchmarking, Analysis, and Optimization of Serverless Function Snapshots https://zhuanlan.zhihu.com/p/572288442 这项工作引入了vHive,一个针对无服务器实验的开源框架,它使系统研究人员能够在整个无服务器堆栈中进行创新。vHive集成了来自领…

ITSM | 权威指南发布,高速IT服务管理团队是什么样子的?

当Netflix正在打造流媒体平台时,还有人在营业厅里为一张网卡而烦恼。当Craig Newmark创建免费分类广告网站时,报社的网络管理员最关心的还是重启电子邮件服务器。当数字化转型成为一道必答题,谁能率先给出解题之法? 阅读本篇文章&…

Input子系统

文章目录前言Input子系统简介Input子系统代码实现框架Linux Input子系统支持的数据类型input核心层设备驱动层input_allocate_device 与 函数input_set_capabilityinput_register_device 函数input_unregister_device 与 input_free_device 函数事件处理层input_attach_handler…

A. Divide and Conquer

An array bb is good if the sum of elements of bb is even. You are given an array aa consisting of nn positive integers. In one operation, you can select an index ii and change ai:⌊ai2⌋ai:⌊ai2⌋. †† Find the minimum number of operations (possibly 00)…

ArcGIS 切片问题小结

1. 如果发布的切片缓存服务没有自动启动怎么办? 在进行切片时偶然情况下可能会遇到,你在切片时已经设置了server自动进行切片处理,但是在服务发布后,服务发布成功,但是服务没有成功启动,导致服务器没有自动…

免费数据恢复方法有哪些?分享这几种简单又实用的恢复方法(2023年最新)

很多时候,我们使用电脑总是容易误删一些数据。比如使用电脑,误删了办公资料;使用SD卡,出现照片没有办法打开的情况;使用移动硬盘,出现文档误格式化等问题。 不必要的数据被删除那就没问题,如果…

Java反序列化—Fastjson基础

0x01 前言 最近摆烂了很久,来学习一下fastjson 0x02 Fastjson 简介 Fastjson 是 Alibaba 开发的 Java 语言编写的高性能 JSON 库,用于将数据在 JSON 和 Java Object 之间互相转换。 提供两个主要接口来分别实现序列化和反序列化操作。 JSON.toJSONStr…

socket应用之从电脑发送图片到手机(1)之通信过程建立

本人曾经做了一个基于MPVd的C#开发的播放器,用于自娱自乐,后来又用websocket 写了个简单的远程控制器。由于websocket 要依赖于浏览器,因此有诸多不便,后来又用flutter写了一个,方便多了。 下面介绍具体实现。 1、通信…

RabbitMQ 消息持久化

RabbitMQ 消息持久化 持久化是为提高rabbitmq消息的可靠性,防止在异常情况(重启,关闭,宕机)下数据的丢失。设置完队列和消息的持久化,并不能完全保证消息不会丢失。尽管它告诉 RabbitMQ 将消息保存到磁盘,但当 Rabbit…

mapbox-gl添加threejs飞线

文章目录前言飞线实现1 初始化地图并加载three图层2 绘制飞线几何体将几何体正确定位在mapbox上正确操作BufferGeometry几何体3 tween实现动画全部代码总结待改进之处参考前言 mapbox-gl是一个基于webgl开发的三维地图渲染引擎,但是很多三维特效只用mapbox并不容易…

【CSDN 年终总结】CSDN的进阶之路—— “1+1=王”的2022总结

正文之前打个广告,我正在参加年度博客之星评选,请大家帮我投票打分,您的每一分都是对我的支持与鼓励。⭐ ⭐ ⭐ ⭐ ⭐https://bbs.csdn.net/topics/611386885?spm1001.2014.3001.6953 2022我在CSDN 2022 在CSDN是持续输出,持续…

TinyPng图片压缩的正确打开方式

https://tinypng.com/ TinyPNG使用智能的「有损压缩技术」来减少WEBP、JPEG和PNG文件的文件大小。通过选择性地减少图像中的「颜色数量」,使用更少的字节来存储数据。这种效果几乎是看不见的,但在文件大小上有非常大的差别。 使用过TinyPNG的都知道&…

MyBatis 万字长文:从入门到动态SQL超详细

文章目录1. 前言2. 创建项目3. 添加框架支持4. 建库5. 配置数据库连接信息和 XML 文件路径5.1 创建 Java 类5.2 Java 接口5.3 XML 文件6. 查询6.1 不带参数的查询6.2 单元测试6.3 带参数的查询7. 修改8. 增加8.1 将对象插入表中8.2 获取自增主键9. 删除10. 数据库字段和类属性名…

Video2StyleGAN: Disentangling Local and Global Variations in a Video翻译

点击下载论文 代码地址 摘要 使用预训练的StyleGAN生成器进行图像编辑已成为面部编辑的强大范例,它提供了对年龄、表情、照明度等的解纠缠控制。然而,该方法不能直接用于视频操作。我们认为主要因素是缺乏对面部位置、面部姿势和局部面部表情的精细和清…

腾讯云-云服务器购买流程-Java项目部署(详细的一批)

文章目录云服务器购买云服务搭建部署环境宝塔面板使用(安装所需环境)部署SpringBoot项目出现Error: Unable to access jarfile /www/wwwroot/xxxx.jar--server.port6066 问题解决腾讯云COS有什么用?如果感觉有用就一键三连吧,创作…

Electron 实现切换暗_亮模式与主题

文章末尾附上仓库地址!!!! 清单 模板基于 electron-vite-vue vue3 ts vite组件库 element-plushooks库 vueuse 、useElementPlusTheme 初始化工程 使用 electron-vite 作为模板,方便大家尽快吧项目跑起来 # 创建模…

Java面试之数据库篇

一、基础 1.数据库事务的特征ACID 原子性(Atomicity):原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用…

UOS服务器操作系统多版本Java切换

一、修改java的环境变量和软链接来实现版本切换 1、配置环境变量 sudo vim ~/.bashrc 2、创建java运行程序软连接 3、使配置生效,并检查java版本 source /etc/profile 二、使用update-alternatives 进行版本的切换 1、同时安装了openjdk-8-jdk 和…