diff --git a/README.md b/README.md index ad64f1c..4dad20d 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,8 @@ ## 一,实验目的 在 LevelDB 的基础上设计和实现一个支持二级索引的功能,优化特定字段的查询效率。通过此功能,用户能够根据字段值高效地检索对应的数据记录,而不需要遍历整个数据库。 +
+ --- @@ -86,6 +88,8 @@ name:Customer#000000002-k_2 : k_2 - **灵活性**:允许用户指定需要创建索引的字段,支持动态创建和删除索引。 - **易用性**:通过统一接口隐藏索引管理的复杂性,保持与原始 LevelDB 类似的用户体验。 +
+ --- @@ -96,7 +100,7 @@ name:Customer#000000002-k_2 : k_2 ## 三,`LevelDB`二级索引设计思路 #### 1. **设计结构** -在 ·LevelDB· 的基础上扩展,补充并实现以下组件: +在 `LevelDB` 的基础上扩展,补充并实现以下组件: ##### 2.1 **核心组件** 1. **主数据库(DBImpl)**: @@ -222,6 +226,8 @@ lessCopy code 主数据库 (DBImpl) 这套设计在功能性、一致性和性能之间达到了较好的平衡,能够为 LevelDB 提供高效、灵活的二级索引支持,同时保持其原有的高性能特性。 +
+ ------ @@ -492,8 +498,9 @@ Status DBImpl::Delete(const WriteOptions& options, const Slice& key) { #### 实现意义 这种设计确保了主数据库和二级索引数据库的一致性,即便在部分写入或删除操作失败的情况下,仍能通过回滚机制保证数据的完整性和原子性。 ---- +
+--- @@ -576,6 +583,8 @@ Level Files Size(MB) Time(sec) Read(MB) Write(MB) - **删除索引的时间**:删除索引需要稍长时间,这也是常见的现象。 +
+ --- @@ -654,10 +663,11 @@ if (!s.ok()) { 通过以上方案,有效解决了实验中遇到的问题,并提高了系统的稳定性和一致性。 ---- +
+--- ## 总结 本实验通过在 `DBImpl` 中集成索引管理功能,实现了对二级索引的创建、查询和删除。二级索引数据存储在独立的 `indexDb_` 中,通过高效的键值映射提升了字段值查询的效率。