【发布时间】:2016-11-21 11:20:01
【问题描述】:
我希望创建一个大型项目列表,以便轻松插入新项目并轻松更改该列表中项目的位置。在更新项目的位置时,我希望尽可能少地更改有关项目顺序的字段。
经过一番研究,我发现 Jira 的 Lexorank 算法可以满足所有这些需求。 Jira 中的每个故事都有一个“rank-field”,其中包含一个由 3 部分组成的字符串:<bucket>|<rank>:<sub-rank>。 (我不知道这些部分是否有实际名称,为了方便参考,我就这样称呼它们)
有效排名字段示例:
0|vmis7l:hl40|i000w8:0|003fhy:zzzzzzzzzzzw68bj
当在0|vmis7l:hl4上方拖动一张卡片时,新卡片将获得排名0|vmis7l:hl2,这意味着只需要更新这张新卡片的排名字段,而整个列表总是可以在这个排名上排序-场地。这相当聪明,我无法想象 Lexorank 是唯一使用它的算法。
- 在子排名中使用的这种排序方法有名称吗?
我的问题与在 Jira 中创建新卡有关。每张新卡都以一个空的子等级开始,并且始终选择等级以使新卡位于列表的底部。我创建了一堆新故事只是为了看看排名会如何变化,而且排名似乎总是增加 8(以 36 为基数)。
- 有谁更具体地知道新卡的排名是如何生成的?为什么要加 8?
我只能想象,过了一段时间(2.7 亿张牌)之后,就没有更多的排名可以生成了,系统需要重新计算所有牌的排名字段,以便为额外的排名腾出空间。
- 是否有其他触发器需要重新计算所有排名字段?
- 我认为存储桶在重新计算中发挥了作用。我想知道怎么做?
【问题讨论】:
-
很好的问题和很好的研究。我也很好奇这个。
-
作为获得许可的 JIRA 用户,您可以从 my.atlassian.com 帐户访问 JIRA 软件的源代码。您可以在 JIRA Software (GreenHopper) JAR 中找到各种 LexoRank 算法,该 JAR(至少从 7.1.0 开始)可以在
dependencySources/jira-greenhopper-plugin-X.Y.Z-sources.jar中找到。提取该 JAR 后,find . -name '*LexoRank*'将告诉您在哪里可以找到算法的内部工作原理。 -
对 lexorank 感兴趣的人的有用视频:youtube.com/watch?v=OjQv9xMoFbg
-
你也可以使用库排序(间隔排序)的思想。保留带有空格的块。这个想法似乎与此类的中间步骤非常相似。 en.wikipedia.org/wiki/Library_sort
标签: algorithm sorting jira jira-agile