Kaynağa Gözat

DataBlock 添加 baseDir 和 relativeDir 两个字段用于统计每个目录下的文件数量, 便于 lb

reghao 2 yıl önce
ebeveyn
işleme
c9424818d4

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

@@ -2,6 +2,7 @@ package cn.reghao.oss.store.db.mapper;
 
 import cn.reghao.oss.store.model.po.DataBlock;
 import cn.reghao.jutil.jdk.db.BaseMapper;
+import cn.reghao.oss.store.model.vo.SubDirCount;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -13,6 +14,10 @@ import java.util.List;
  */
 @Mapper
 public interface DataBlockMapper extends BaseMapper<DataBlock> {
+    void updateParent(@Param("id") int id, @Param("relativeDir") String relativeDir);
+    void updateBatch(List<DataBlock> list);
+
     List<DataBlock> findDataBlocks(@Param("pageSize") int pageSize, @Param("nextId") int nextId);
     DataBlock findByContentId(String contentId);
+    List<SubDirCount> findSubDirCount(String baseDir);
 }

+ 2 - 0
oss-store/src/main/java/cn/reghao/oss/store/model/po/DataBlock.java

@@ -19,6 +19,8 @@ public class DataBlock extends BaseObject<Integer> {
     private int index;
     private String blockId;
     private String host;
+    private String baseDir;
+    private String relativeDir;
     private String absolutePath;
     private long size;
     private long start;

+ 13 - 0
oss-store/src/main/java/cn/reghao/oss/store/model/vo/SubDirCount.java

@@ -0,0 +1,13 @@
+package cn.reghao.oss.store.model.vo;
+
+import lombok.Getter;
+
+/**
+ * @author reghao
+ * @date 2023-11-01 21:38:59
+ */
+@Getter
+public class SubDirCount {
+    private String relativeDir;
+    private int total;
+}

+ 32 - 4
oss-store/src/main/resources/mapper/DataBlockMapper.xml

@@ -4,16 +4,16 @@
 <mapper namespace="cn.reghao.oss.store.db.mapper.DataBlockMapper">
     <insert id="save" useGeneratedKeys="true" keyProperty="id">
         insert into data_block
-        (`id`,`deleted`,`create_time`,`update_time`,`content_id`,`index`,`block_id`,`host`,`absolute_path`,`size`,`start`,`end`)
+        (`id`,`deleted`,`create_time`,`update_time`,`content_id`,`index`,`block_id`,`host`,`base_dir`,`relative_dir`,`absolute_path`,`size`,`start`,`end`)
         values
-        (#{id},#{deleted},#{createTime},#{updateTime},#{contentId},#{index},#{blockId},#{host},#{absolutePath},#{size},#{start},#{end})
+        (#{id},#{deleted},#{createTime},#{updateTime},#{contentId},#{index},#{blockId},#{host},#{baseDir},#{relativeDir},#{absolutePath},#{size},#{start},#{end})
     </insert>
     <insert id="saveAll" useGeneratedKeys="true" keyProperty="id">
         insert into data_block
-        (`id`,`deleted`,`create_time`,`update_time`,`content_id`,`index`,`block_id`,`host`,`absolute_path`,`size`,`start`,`end`)
+        (`id`,`deleted`,`create_time`,`update_time`,`content_id`,`index`,`block_id`,`host`,`base_dir`,`relative_dir`,`absolute_path`,`size`,`start`,`end`)
         values
         <foreach collection="list" item="item" index="index" separator=",">
-            (#{item.id},#{item.deleted},#{item.createTime},#{item.updateTime},#{item.contentId},#{item.index},#{item.blockId},#{item.host},#{item.absolutePath},#{item.size},#{item.start},#{item.end})
+            (#{item.id},#{item.deleted},#{item.createTime},#{item.updateTime},#{item.contentId},#{item.index},#{item.blockId},#{item.host},#{item.baseDir},#{item.relativeDir},#{item.absolutePath},#{item.size},#{item.start},#{item.end})
         </foreach>
     </insert>
 
@@ -34,4 +34,32 @@
         from data_block
         where content_id=#{contentId}
     </select>
+    <select id="findSubDirCount" resultType="cn.reghao.oss.store.model.vo.SubDirCount">
+        select relative_dir,count(*) as total
+        from data_block
+        group by relative_dir
+        order by total asc
+    </select>
+
+    <update id="updateParent">
+        update data_block
+        set relative_dir=#{relativeDir}
+        where id=#{id}
+    </update>
+    <update id="updateBatch">
+        update data_block
+        <trim prefix="set" suffixOverrides=",">
+            <trim prefix="relative_dir =case" suffix="end,">
+                <foreach collection="list" item="item" index="index">
+                    when id=#{item.id} then #{item.relativeDir}
+                </foreach>
+            </trim>
+        </trim>
+        <where>
+            id in
+            <foreach collection="list" item="item" separator="," open="(" close=")">
+                #{item.id}
+            </foreach>
+        </where>
+    </update>
 </mapper>

+ 27 - 1
oss-store/src/test/java/FileMetaTest.java

@@ -3,6 +3,7 @@ import cn.reghao.oss.store.db.mapper.DataBlockMapper;
 import cn.reghao.oss.store.db.mapper.FileMetaMapper;
 import cn.reghao.oss.store.model.po.DataBlock;
 import cn.reghao.oss.store.model.po.FileMeta;
+import cn.reghao.oss.store.model.vo.SubDirCount;
 import cn.reghao.oss.store.service.ObjectNameService;
 import cn.reghao.oss.store.util.UserContext;
 import cn.reghao.jutil.jdk.db.Page;
@@ -178,7 +179,8 @@ public class FileMetaTest {
         int nextId = 0;
         List<DataBlock> list = dataBlockMapper.findDataBlocks(pageSize, nextId);
         while (!list.isEmpty()) {
-            process(list);
+            process1(list);
+            dataBlockMapper.updateBatch(list);
 
             nextId = list.get(list.size()-1).getId();
             list = dataBlockMapper.findDataBlocks(pageSize, nextId);
@@ -195,4 +197,28 @@ public class FileMetaTest {
             }
         }
     }
+
+    private void process1(List<DataBlock> list) {
+        for (DataBlock dataBlock : list) {
+            int id = dataBlock.getId();
+            String absolutePath = dataBlock.getAbsolutePath();
+            int idx = absolutePath.lastIndexOf("/");
+            String parent = absolutePath.substring(0, idx);
+            String relativeDir = parent.replace("/opt/oss/disk/13f654c8-af87-4710-aac9-7aa086c99aec", "");
+            dataBlock.setRelativeDir(relativeDir);
+
+            /*String contentId = dataBlock.getContentId();
+            List<FileMeta> list1 = fileMetaMapper.findByContentId(contentId);
+            if (list1.isEmpty()) {
+                log.info("{} not exist in file_meta", contentId);
+            }*/
+        }
+    }
+
+    @Test
+    public void test123() {
+        String baseDir = "";
+        List<SubDirCount> list = dataBlockMapper.findSubDirCount("");
+        System.out.println();
+    }
 }