前一篇中简单的写了下关于索引的删除,这一篇中完整的介绍整个数据删除步骤。
1.根据ID查找索引数据(主要是获取具体数据地址,有点像数据库中的根据索引进行回表)
2.根据索引的数据偏移查找具体的空间ID(在第二篇中介绍了整个系统的存储结构,存储空间是分块的,一个数据对象可能存储在一个“逻辑空间”中,也有可能存储在多个存储空间中,取决于对象的大小)。
3.根据ID去管理文件中查找具体的空间存储,采用跳跃表的方式进行查找
4.回收数据空间,这里其实就是把空间的使用状态设为“NEW”,也就是未使用状态,下次分配的时候可以根据状态进行判断当前空间是使用状态还是未使用状态而进行重新分配。
5.回收索引,可重复使用,也是设置索引的状态
入口代码的实现,这里只贴入口代码,每一步都会有比较具体的实现,比如说如何根据ID查找索引,如何检索数据地址,以后会讲到:
public void run() {
long startTime = System.currentTimeMillis();
//从索引文件中查找索引,主要是可以获取数据空间的偏移量
DataOffset offset = indexReader.read(id);
if (offset != null) {
List<Integer> storageIdList = new ArrayList<Integer>();
//查询存储空间的ID,是一个List
dataReader.readStorage(storageIdList, offset);
//根据id列表取存储文件中查找具体的空间ID。
List<DataObject> storageList = dataFileManager.read(storageIdList);
//回收数据空间,这里其实就是把空间的使用状态设为“NEW”,也就是未使用
dataFileManager.gc(storageList);
IndexStruct indexStruct = new IndexStruct();
indexStruct.setKey(offset.getIndexId());
indexStruct.setDataStartPos(offset.getStartPos());
//回收索引,可重复使用,也是设置索引的状态
indexWriter.gc(offset.getIndexPos(), indexStruct);
}
System.out.println("[DataRemovePerThread.run]timeDiff="+(System.currentTimeMillis()-startTime));
}
这是整个删除的操作的序列图,其实是上面一段代码用图的方式表现出来:
再用一张流程图会更加清楚的看到具体的删除流程:
总结:这里并未考虑事务性,在这几步中都可能有异常情况而导致数据操作失败,这样的情况下理论上是需要进行回滚。当然在我的实现中并未把事务纳入其中,所以也并未做这方面的现实。这里两个地方检索是用到了跳跃表,索引的检索不言自明,前面有博文已经讲到过。空间地址的搜索也是用跳跃表进行实现,这样可以加快检索速度而提高性能。
分享到:
相关推荐
共享单车数据存储-共享单车数据存储系统-共享单车数据存储系统源码-共享单车数据存储管理系统-共享单车数据存储管理系统java代码-共享单车数据存储系统设计与实现-基于springboot的共享单车数据存储系统-基于Web的...
共享单车数据存储-共享单车数据存储系统-共享单车数据存储系统源码-共享单车数据存储管理系统-共享单车数据存储管理系统java代码-共享单车数据存储系统设计与实现-基于springboot的共享单车数据存储系统-基于Web的...
Spark的共享单车数据存储-Spark的共享单车数据存储系统-Spark的共享单车数据存储系统源码-Spark的共享单车数据存储管理系统-Spark的共享单车数据存储管理系统java代码-Spark的共享单车数据存储系统设计与实现-基于...
Spark的共享单车数据存储-Spark的共享单车数据存储系统-Spark的共享单车数据存储系统源码-Spark的共享单车数据存储管理系统-Spark的共享单车数据存储管理系统java代码-Spark的共享单车数据存储系统设计与实现-基于...
实现数据的存盘和读盘。 3). 以图形方式显示家谱。 4). 显示第n 代所有人的信息。 5). 按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。 6). 按照出生日期查询成员名单。 7). 输入两人姓名,确定其...
3--删除(根据LinkID删除); 4--查询(LinkID,Brunch,RoadName);-----(实际要求还要分二分查找等查找方法,在设计的时候理解错误,最后偷懒没写) 5--排序(顺序表7种,链表4种); 6--更新文件(将排序后的数据...
通过需求定义,画出图书管理系统的数据流图: 图书管理系统数据库设计-MYSQL实现-(2)全文共21页,当前为第2页。图书管理系统数据库设计-MYSQL实现-(2)全文共21页,当前为第2页。数据流图 图书管理系统数据库设计-...
此程序主要实现对数据的加载和处理,首先加载数据,本算法选择的数据集是鸢尾花数据集,加载的数据形式是元胞数组,本程序先把其转换成字符串数组,后对字符串数组进行处理,将数据部分和标签部分分隔开,数据部分...
通过需求定义,画出图书管理系统的数据流图: 图书管理系统数据库设计mysql实现-()全文共25页,当前为第2页。图书管理系统数据库设计mysql实现-()全文共25页,当前为第2页。数据流图 图书管理系统数据库设计mysql...
基于Spark的共享单车数据存储系统代码 | java | springboot | spring | 代码 | 网站 | 毕设 1、技术栈:微信小程序,springboot,uniapp,vue,ajax,maven,mysql,MyBatisPlus 2、系统的实现 用户信息 图片素材 ...