儲存系統實現-如何刪除資料
前一篇中簡單的寫了下關於索引的刪除,這一篇中完整的介紹整個資料刪除步驟。
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));
}
這是整個刪除的操作的序列圖,其實是上面一段程式碼用圖的方式表現出來:
再用一張流程圖會更加清楚的看到具體的刪除流程:
總結:這裡並未考慮事務性,在這幾步中都可能有異常情況而導致資料操作失敗,這樣的情況下理論上是需要進行回滾。當然在我的實現中並未把事務納入其中,所以也並未做這方面的現實。這裡兩個地方檢索是用到了跳躍表,索引的檢索不言自明,前面有博文已經講到過。空間地址的搜尋也是用跳躍表進行實現,這樣可以加快檢索速度而提高效能。
相關文章
- 儲存系統實現-資料刪除之索引的刪除索引
- 儲存系統實現-資料檔案格式
- 誤刪除儲存SqlServer資料庫資料恢復SQLServer資料庫資料恢復
- 七牛雲端儲存資料,刪除無用資料
- Laravel 如何實現資料的軟刪除Laravel
- 自研資料庫CynosDB儲存系統如何實現即時恢復資料庫
- MySQL如何實現萬億級資料儲存?MySql
- 儲存系統實現-構建自己的儲存系統(一)
- 【儲存資料恢復】HP EVA儲存誤刪除VDISK的資料恢復案例資料恢復
- 【儲存資料恢復】NetApp儲存誤刪除的資料恢復案例資料恢復APP
- 儲存刪除資料後恢復方法-適用netAPP儲存APP
- 伺服器資料恢復—EMC儲存資料卷被誤刪除如何恢復資料?伺服器資料恢復
- 儲存與資料庫系統資料庫
- 如何實現檔案傳輸系統的多儲存
- 如何實現企業雲盤資料化儲存
- DataLeap資料資產實戰:如何實現儲存最佳化?
- 分散式系統中的資料儲存方案實踐分散式
- 【萬里征程——Windows App開發】如何儲存、讀取、刪除應用資料WindowsAPP
- Win10系統刪除已儲存的WiFi網路的方法Win10WiFi
- 如何刪除windows電腦儲存的NAS憑據?Windows
- 如何刪除 Mac 儲存空間的其他選項?Mac
- 【儲存資料恢復】H3C FlexStorage儲存卷被刪如何恢復資料?資料恢復Flex
- EMC UNITY 400儲存卷刪除資料恢復操作過程Unity資料恢復
- 檔案系統儲存與oracle資料庫儲存對比Oracle資料庫
- 儲存系統實現-跳躍表實現索引檢索索引
- 大資料檔案儲存系統HDFS大資料
- 谷歌打造新款資料儲存系統Mesa谷歌
- .NET使用儲存過程實現對資料庫的增刪改查儲存過程資料庫
- 傳統資料庫也能實現區塊鏈儲存資料庫區塊鏈
- windows10 upgrade可以刪除嗎_win10系統如何刪除upgrade資料夾WindowsWin10
- 如何刪除SAP 系統日誌
- 實現報表資料分庫儲存
- 用DNA儲存資料成為現實
- 如何刪除oracle資料庫Oracle資料庫
- php 刪除資料夾的實現程式碼PHP
- 【MySQL】刪除大量資料的具體實現MySql
- INNODB 頁節點資料的儲存方式、資料鏈、刪除鏈的學習和實驗總結
- javascript cookie的儲存和刪除功能JavaScriptCookie