Преглед изворни кода

oss-mgr 添加一些用于测试的 sql 查询

reghao пре 1 месец
родитељ
комит
34ce822f75

+ 5 - 0
oss-mgr/src/main/java/cn/reghao/oss/mgr/db/mapper/DataBlockMapper.java

@@ -5,6 +5,8 @@ import cn.reghao.oss.mgr.model.po.DataBlock;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * @author reghao
  * @date 2022-11-24 11:11:24
@@ -14,4 +16,7 @@ public interface DataBlockMapper extends BaseMapper<DataBlock> {
     void updatePath(@Param("sha256sum") String sha256sum, @Param("path") String path);
     DataBlock findBySha256sum(String sha256sum);
     DataBlock findByObjectId(String objectId);
+
+    void updateDataBlock(@Param("id") int id, @Param("hostPort") String hostPort);
+    List<DataBlock> findAllById(@Param("pageSize") int pageSize, @Param("nextId") int nextId);
 }

+ 1 - 0
oss-mgr/src/main/java/cn/reghao/oss/mgr/db/mapper/FileMetaMapper.java

@@ -24,4 +24,5 @@ public interface FileMetaMapper extends BaseMapper<FileMeta> {
     ObjectMeta findObjectMetaByName(@Param("objectName") String objectName, @Param("owner") long owner);
     ObjectMeta findObjectMetaById(@Param("objectId") String objectId, @Param("owner") long owner);
     ObjectInfo findObjectInfoById(@Param("objectId") String objectId);
+    List<FileMeta> findBySha256List(List<String> list);
 }

+ 19 - 0
oss-mgr/src/main/resources/mapper/DataBlockMapper.xml

@@ -22,7 +22,19 @@
         set absolute_path=#{path}
         where sha256sum=#{sha256sum}
     </update>
+    <update id="updateDataBlock">
+        update data_block
+        set host_port=#{hostPort}
+        where id=#{id}
+    </update>
 
+    <select id="findAll" resultType="cn.reghao.oss.mgr.model.po.DataBlock">
+        select *
+        from data_block
+        where absolute_path like '/opt/disk/13%'
+        order by `size`  desc
+        limit 10000
+    </select>
     <select id="findBySha256sum" resultType="cn.reghao.oss.mgr.model.po.DataBlock">
         select *
         from data_block
@@ -35,4 +47,11 @@
         on filemeta.sha256sum=datablock.sha256sum
         where filemeta.`deleted` is false and filemeta.object_id=#{objectId}
     </select>
+    <select id="findAllById" resultType="cn.reghao.oss.mgr.model.po.DataBlock">
+        select *
+        from data_block
+        where id > #{nextId}
+        order by id asc
+        limit #{pageSize}
+    </select>
 </mapper>

+ 8 - 0
oss-mgr/src/main/resources/mapper/FileMetaMapper.xml

@@ -77,4 +77,12 @@
         from file_meta
         where deleted is false and object_id=#{objectId}
     </select>
+    <select id="findBySha256List" resultType="cn.reghao.oss.mgr.model.po.FileMeta">
+        select *
+        from file_meta
+        where sha256sum in
+        <foreach collection="list" item="id" index="index" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
+    </select>
 </mapper>

+ 60 - 0
oss-mgr/src/test/java/FileMetaTest.java

@@ -1,11 +1,20 @@
+import cn.reghao.jutil.jdk.converter.ByteConverter;
 import cn.reghao.oss.mgr.OssMgrApplication;
+import cn.reghao.oss.mgr.db.mapper.DataBlockMapper;
+import cn.reghao.oss.mgr.db.mapper.FileMetaMapper;
 import cn.reghao.oss.mgr.db.mapper.UserKeyMapper;
+import cn.reghao.oss.mgr.model.po.DataBlock;
+import cn.reghao.oss.mgr.model.po.FileMeta;
 import lombok.extern.slf4j.Slf4j;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.ActiveProfiles;
 
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
 /**
  * @author reghao
  * @date 2026-02-18 17:04:30
@@ -17,8 +26,59 @@ public class FileMetaTest {
     @Autowired
     UserKeyMapper userKeyMapper;
 
+    @Autowired
+    FileMetaMapper fileMetaMapper;
+    @Autowired
+    DataBlockMapper dataBlockMapper;
     @Test
     public void test() {
         //userKeyMapper.findByAccessKeyId();
+        findAllById();
+    }
+
+    private void findBySha256List() {
+        ByteConverter byteConverter = new ByteConverter();
+        List<DataBlock> dataBlocks = dataBlockMapper.findAll();
+        long total = dataBlocks.stream().mapToLong(DataBlock::getSize).sum();
+        String result = byteConverter.convert(total);
+        String max = byteConverter.convert(dataBlocks.getFirst().getSize());
+        String min = byteConverter.convert(dataBlocks.getLast().getSize());
+        log.info("总大小: {} {} {}", result, max, min);
+
+        List<String> list = dataBlocks.stream().map(DataBlock::getSha256sum).collect(Collectors.toList());
+        List<FileMeta> list1 = fileMetaMapper.findBySha256List(list);
+
+        Map<String, List<FileMeta>> groupMap = list1.stream().collect(Collectors.groupingBy(FileMeta::getSha256sum));
+        for (Map.Entry<String, List<FileMeta>> entry : groupMap.entrySet()) {
+            String sha256sum = entry.getKey();
+            List<FileMeta> list2 = entry.getValue();
+
+            FileMeta fileMeta = list2.getFirst();
+            if (!fileMeta.getObjectName().startsWith("video/playback")) {
+                continue;
+            }
+
+            String sizeStr = byteConverter.convert(fileMeta.getSize());
+            log.info("file_list: {} -> {} - {}", list2.size(), sizeStr, fileMeta.getFilename());
+        }
+    }
+
+    private void findAllById() {
+        int pageSize = 10000;
+        int nextId = 0;
+        List<DataBlock> dataBlocks = dataBlockMapper.findAllById(pageSize, nextId);
+        while (!dataBlocks.isEmpty()) {
+            dataBlocks.forEach(this::process);
+
+            nextId = dataBlocks.get(dataBlocks.size()-1).getId();
+            dataBlocks = dataBlockMapper.findAllById(pageSize, nextId);
+            log.info("start nextId {} with size {}", nextId, dataBlocks.size());
+        }
+    }
+
+    private void process(DataBlock dataBlock) {
+        String hostPort = "192.168.0.10:8020";
+        int id = dataBlock.getId();
+        dataBlockMapper.updateDataBlock(id, hostPort);
     }
 }