前一篇中簡單的寫了下關於索引的刪除,這一篇中完整的介紹整個資料刪除步驟。
1.根據id查詢索引資料(主要是獲取具體資料位址,有點像資料庫中的根據索引進行回表)
2.根據索引的資料偏移查詢具體的空間id(在第二篇中介紹了整個系統的儲存結構,儲存空間是分塊的,乙個資料物件可能儲存在乙個「邏輯空間」中,也有可能儲存在多個儲存空間中,取決於物件的大小)。
3.根據id去管理檔案中查詢具體的空間儲存,採用跳躍表的方式進行查詢
4.**資料空間,這裡其實就是把空間的使用狀態設為「new」,也就是未使用狀態,下次分配的時候可以根據狀態進行判斷當前空間是使用狀態還是未使用狀態而進行重新分配。
5.**索引,可重複使用,也是設定索引的狀態
public void run()
system.out.println("[dataremoveperthread.run]timediff="+(system.currenttimemillis()-starttime));
}
這是整個刪除的操作的序列圖,其實是上面一段**用圖的方式表現出來:
再用一張流程圖會更加清楚的看到具體的刪除流程:
總結:這裡並未考慮事務性,在這幾步中都可能有異常情況而導致資料操作失敗,這樣的情況下理論上是需要進行回滾。當然在我的實現中並未把事務納入其中,所以也並未做這方面的現實。這裡兩個地方檢索是用到了跳躍表,索引的檢索不言自明,前面有博文已經講到過。空間位址的搜尋也是用跳躍表進行實現,這樣可以加快檢索速度而提高效能。
redis redis如何刪除資料
世界上並沒有完美的程式,但是我們並不因此而沮喪,因為寫程式就是乙個不斷追求完美的過程。在redis操作時,你會發現並沒有刪除資料的功能,但是有些資料需要持久快取,只是會根據條件刪除一些不符合要求的,那麼如何做呢 strin alueopt.set key,0 10,timeunit.millisec...
Elasticsearch如何刪除資料以及索引
1 刪除索引下全部資料,保留資料結構 注意請求方式是post 索引 data2.0 2020.03.26 注意 請求方式是post,只刪除資料,不刪除表結構 post 索引 delete by query?pretty 2 根據匹配條件刪除指定資料 注意請求方式是post 索引 data2.0 20...
MySQL中如何刪除資料
使用delete子句 delete from 表名 where 條件 例 刪除 e 表中 emp id 為 1 的雇員資訊。delete from e where emp id 1 使用truncate清空表 truncate table 表名 例 刪除 e 表中的所有資料 truncate tab...