java - java备用备份轮换算法

标签 java algorithm rotation backup

我是旋转算法的初学者我需要增强已经存在的Java中的备份算法,它负责备份数据库并归档它们。此算法的一个重要方面是它读取一个ini文件,您可以在其中指定用户希望在一周中的哪几天备份其数据库。
例如,这样:
ScheduledWeekDaysAct=MON, TUE, WED, THU, FRI

ScheduledWeekDaysAct=TUE, FRI
因此,轮换算法必须考虑到备份可以在所有日期的组合中创建。这意味着我不能轻易地使用我已经实现的祖父父子算法。因为我编写的代码期望在一年中的每一天都创建备份,这与备份代码不兼容。
对于这个问题,有一个算法思想,一个不太复杂的预期行为,如下所示:
应始终保留前10(十)个最近的备份。
保留最近的10个之后,其余的老年人应该变瘦。不是一件一件的,而是按日期时间。第10个最旧备份的日期是指定的参考日期,在新备份发生时,将比较旧备份旧的备份应该像下面这样保存和精简。
在第10个最老的备份之后,应保留:
前3-4周最新的3或4个备份,
11个月备份,
每年备份一次。
我不能使用系统日期和时间,我必须分析备份的文件名。
但最终还是提供了备份的日期。
我的方法:
因为我不知道日程安排,哪一天会有备份,所以我必须处理时间间隔、时间段、日期条带。我需要确定第10次备份后备份的相对年龄此相对年龄定义为实际参考日期(备份的第10个最早日期)与第10次保存之前的备份日期之间的天数差。
我可以这样做,读取文件名,解析String中的日期,从这些解析的字符串中获取Date对象。我可以将它们放入Map<Path, Date>(稍后我还需要Set的无重复功能来删除相同的日期[可以有多个日期相同但名称不同的数据库])。
我总是可以确定第10次保存的日期,这样就可以得到referenceDate对象。
因此,我总能计算出备份的相对年龄。
备份的相对年龄是唯一的,我可以用Date存储一个相对年龄,从中可以像这样计算。
我想,我需要处理相对年龄范围(TreeMap<Integer, Date>)。如果我能确定相对年龄范围内的最小和最大相对年龄,那么我可以过滤由相对年龄所引用的keySet()对象。
Dateif relativeAge < 7等等)但我也必须旋转if relativeAge >= 7 & relativeAge < 14
我不知道该怎么办,任何想法都值得赞赏。谢谢您!
编辑1:
从本质上讲,问题可归结为以下几点:
我有一个整数列表(相对年龄表):[1,3,5,8,10,12,15,17,19,22,24,26…]
我必须创建上下边界来形成这些整数的组。
一个整数,相对年龄可以是0&7或7&14,14&21,21&28,28&56,56&84336&364,可以大于364。我必须找到分别属于这些范围的整数在我发现这些整数组(一个组可能包含0、1或更多整数)之后,我必须取某个范围内的最高/最老相对年龄组如果范围超过364,我将不得不保持最低储蓄,以阻止每年储蓄积累。
我必须把这些最高的相对年龄收集在上述范围内,这些将形成一组相对年龄。
这些相对年龄明确地引用了备份文件的日期,所以现在我将知道在实际的轮换中应该保留哪个日期/文件。
在给定的旋转中,我可以解释最大相对年龄(Max ReaGeD)的概念,即相对于实际的参考日期,最老的备份的年龄。
我不必检查最大相对年龄以上的整数范围。一年后算法将全面运行。
但是我仍然不知道如何用java编写这个算法。

最佳答案

回答我自己的问题。
为了实现该算法,我将整数列表放入TreeSet中。我遍历了这个集合,检查一个整数(相对年龄)是否在一个相对年龄范围内,如果是,我将它们收集到另一个集合中,如下所示:

private void checkRelativeAge(TreeSet<Integer> ageGroup, int relAge, 
int boundary, int offset) {
    if (relAge > boundary & relAge <= boundary + offset) {
        ageGroup.add(relAge);
    }
}

在迭代相对年龄时,可以多次调用:
checkRelativeAge(relAgesBetween336And364, relAge, 336, 28);
checkRelativeAge(relAgesBetween308And336, relAge, 308, 28);
checkRelativeAge(relAgesBetween280And308, relAge, 280, 28);

...
checkRelativeAge(relAgesBetween7And14, relAge, 7, 7);
checkRelativeAge(relAgesBetween1And7, relAge, 0, 7);

在我将收集到的相对年龄分成若干组之后,我再次遍历相对年龄,检查相对年龄是否在一个范围内,如果在一个范围内,我将取该范围的最后一个和第一个元素。
    if (relAge > boundary & relAge <= boundary + offset) {
        toBePreservedSet.add(dateRelativeAgeMap.get(ageGroup.last()));
        toBePreservedSet.add(dateRelativeAgeMap.get(ageGroup.first()));
    }

最后,从集合toBePreservedSet中,我可以分别关联要保留的日期,从日期中,我可以关联回文件名,并确定在给定的循环中要保留哪些和删除哪些。

关于java - java备用备份轮换算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26123279/

相关文章:

java - 在 Websphere 8.0.0.13 中设置 Oracle JDBC 提供程序

字符串编码算法

class - PYGAME - 使一个对象旋转到自动生成的对象

java - 在android中对 map 进行排序

java - LGPL Xuggle : ConverterFactory. createConverter 不支持

algorithm - 一次删除 B-Tree

c++ - 在 C++ 中旋转 PNG 图像

java - 如何更改javafx中按键的旋转方向

java - Java 中的 JAVA_OPTS "-D"标志的值是否有最大大小限制?

algorithm - 像电子商务网站一样创建产品比较页面