从0开始:500行代码实现 LSM 数据库

复制/**   * 从内存表转化为ssTable   * @param index   */    private void initFromIndex(TreeMap<String, Command> index) {      try {          JSONObject partData = new JSONObject(true);          tableMetaInfo.setDataStart(tableFile.getFilePointer());          for (Command command : index.values()) {              //处理set命令              if (command instanceof SetCommand) {                  SetCommand set = (SetCommand) command;                  partData.put(set.getKey(), set);              }              //处理RM命令              if (command instanceof RmCommand) {                  RmCommand rm = (RmCommand) command;                  partData.put(rm.getKey(), rm);               }                  //达到分段数量,开始写入数据段              if (partData.size() >= tableMetaInfo.getPartSize()) {                  writeDataPart(partData);              }          }          //遍历完之后如果有剩余的数据(尾部数据不一定达到分段条件)写入文件          if (partData.size() > 0) {               writeDataPart(partData);          }          long dataPartLen = tableFile.getFilePointer() - tableMetaInfo.getDataStart();          tableMetaInfo.setDataLen(dataPartLen);          //保存稀疏索引          byte[] indexBytes = JSONObject.toJSONString(sparseIndex).getBytes(StandardCharsets.UTF_8);          tableMetaInfo.setIndexStart(tableFile.getFilePointer());          tableFile.write(indexBytes);          tableMetaInfo.setIndexLen(indexBytes.length);          LoggerUtil.debug(LOGGER, "[SsTable][initFromIndex][sparseIndex]: {}", sparseIndex);            //保存文件索引        tableMetaInfo.writeToFile(tableFile);        LoggerUtil.info(LOGGER, "[SsTable][initFromIndex]: {},{}", filePath, tableMetaInfo);          } catch (Throwable t) {           throw new RuntimeException(t);      }  }  1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.

THE END
本站服务器由亿华云赞助提供-企业级高防云服务器