
复制/** * 从内存表转化为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); } } //遍历完之后如果有剩余的服务器租用始行实现M数数据(尾部数据不一定达到分段条件)写入文件 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.云服务器