儲存系統實現-資料刪除之索引的刪除
在前幾篇中一直沒有提到儲存刪除功能。在這一篇中著重講一下儲存的刪除。
可以分為兩塊:1. 索引的刪除;2.資料的刪除。
這一節主要講一講索引刪除,因為資料的刪除會相對複雜一些。
索引的刪除,這裡有邏輯刪除和物理刪除兩種實現方案。物理刪除必然會導致整個位移發生移動(這裡可以思考ArrayList刪除一個元素而導致整個陣列下標都需要改變)。所以在這裡主要考慮用邏輯刪除。邏輯刪除的思想很簡單,理論上其實是刪除索引與資料之間的關聯,這樣索引就可以進行復用。
先看一下整個狀態的列舉類:
/**
* 索引使用狀態
*
*/
public enum IndexStatus {
//最新狀態:可以使用
NEW(0),
//使用中狀態
IN_USE(1),
//等待GC狀態
WAIT_FOR_GC(2);
private int id;
IndexStatus(int id){
this.id = id;
}
public int getId() {
return id;
}
}
下面看一下這三種狀態的狀態流轉圖:
從這個圖中可以看出整個狀態是一個閉環,在新建索引或者重新分配索引的時候索引的狀態是"IN_USE",如果出現
remove事件索引狀態是“WAIT_FOR_USE”狀態,然後是GC的時候索引狀態才回到“NEW”狀態。有些人可能要問為什
麼需要“WAIT_FOR_USE”狀態,其實這裡GC牽涉到資料空間的刪除,而資料空間的刪除相比索引刪除會相對耗時一
些,所以這裡先擬一箇中間狀態做一箇中轉。保證索引刪除和資料空間刪除可以獨立進行。
這裡的刪除是一個邏輯刪除,迴歸到“NEW”狀態的索引可以重複使用,這樣主要保證整個索引空間的大小以及空間的
利用率。因為如果空間不進行重複使用,大量的刪除會導致很多無效空間而影響整個索引檢索效能。而回歸到最上面
所說的如果使用物理刪除又是一個極耗時的過程。所以採用這種刪除將是一種比較好的方式。
相關文章
- 儲存系統實現-如何刪除資料
- mysql刪除主鍵索引,刪除索引語法MySql索引
- 誤刪除儲存SqlServer資料庫資料恢復SQLServer資料庫資料恢復
- 七牛雲端儲存資料,刪除無用資料
- MongoDB之資料刪除MongoDB
- whk我【資料刪除】你個【資料刪除】的
- Laravel 如何實現資料的軟刪除Laravel
- 指定刪除幾天前的索引資料索引
- Lucene中建立索引的效率和刪除索引的實現索引
- Laravel 中利用『模型事件』來實現刪除資料時的連帶刪除Laravel模型事件
- javascript cookie的儲存和刪除功能JavaScriptCookie
- 【儲存資料恢復】HP EVA儲存誤刪除VDISK的資料恢復案例資料恢復
- 【儲存資料恢復】NetApp儲存誤刪除的資料恢復案例資料恢復APP
- 刪除資料
- 刪除某個檔案或資料夾時,系統提示無法刪除!
- 儲存刪除資料後恢復方法-適用netAPP儲存APP
- php 刪除資料夾的實現程式碼PHP
- 【MySQL】刪除大量資料的具體實現MySql
- Win10系統刪除已儲存的WiFi網路的方法Win10WiFi
- oracle資料庫建立、刪除索引等操作Oracle資料庫索引
- 資料庫 - 索引、基本表建立與刪除資料庫索引
- 刪除私有dblink的儲存過程儲存過程
- 儲存過程誤刪除的恢復儲存過程
- 【刪除】【Oracle】完美刪除Windows系統上的Oracle軟體OracleWindows
- SVN 儲存使用者資訊刪除
- indexedDB 刪除資料Index
- Solr刪除資料Solr
- 刪除elasticsearch資料Elasticsearch
- MongoDB 資料庫建立刪除、表(集合)建立刪除、資料增刪改查MongoDB資料庫
- oracle 快速刪除大批量資料方法(全部刪除,條件刪除,刪除大量重複記錄)Oracle
- Win10還原系統會刪除資料嗎?Win10系統還原是否會刪除資料的解答Win10
- 實現 UITableViewCell的批量刪除UIView
- React實現表單資料的新增與刪除React
- Mysql索引的建立與刪除MySql索引
- MySQL 5.5 刪除索引的方法MySql索引
- CoreData實踐(六)——資料刪除
- delete/truncate刪除資料索引空間問題delete索引
- DataFrame刪除複合索引索引