Language agnostic 时间轴事件同步的数据模型
我正在寻找关于以下问题的数据模型的想法(以及正确的CS术语): 具有多行(A、B、C)的(水平)“时间线”包含“事件”(1、2、3)宽度不同的持续时间(宽度),在不同的时间(绝对x位置或延迟),“在前一个事件之后”: (这些行只对重叠/并行“事件”的图形表示感兴趣,因此它们可能对数据模型不是必需的。) 事件持续时间可能会发生变化,影响整个时间安排:Language agnostic 时间轴事件同步的数据模型,language-agnostic,data-modeling,Language Agnostic,Data Modeling,我正在寻找关于以下问题的数据模型的想法(以及正确的CS术语): 具有多行(A、B、C)的(水平)“时间线”包含“事件”(1、2、3)宽度不同的持续时间(宽度),在不同的时间(绝对x位置或延迟),“在前一个事件之后”: (这些行只对重叠/并行“事件”的图形表示感兴趣,因此它们可能对数据模型不是必需的。) 事件持续时间可能会发生变化,影响整个时间安排: A 11....222222 B 33333+3 ------------------ T 0123456789ABCDEF 但让事件2要求事
A 11....222222
B 33333+3
------------------
T 0123456789ABCDEF
但让事件2要求事件1和3完成,因此时间安排应如下所示:
A 11.... 222222
B 33333+3
------------------
T 0123456789ABCDEF
(让我们忽略T=7处的原始延迟现在丢失。)
最初我认为我必须有一些“弹性”同步元素,每行一个:
A 11....####222222
B 33333+3#
------------------
T 0123456789ABCDEF
因此,如何在两个不同的“行”中对同步元素进行建模和同步是一个原始问题。但是,如上所述,这只是一个图形/并行表示的问题
相反,同步是一种可以“附加”到事件2的条件,可以修改或确定其开始。
如果一个事件“有”一个条件,它将没有绝对或相对的开始时间。它的开始只能在“链接”事件(1和3)结束时确定
因此,给定(一系列)持续时间可变且绝对开始时间或相对于另一事件结束的延迟的事件,如何对“事件1和3结束”的条件进行建模以确定“事件2”的开始
(我将用JavaScript创建原型,并最终用C/C++实现,因此提供的任何示例代码都不应使用高级数据类型或库。)您需要的是一个我称之为
时间框架的对象。对象将具有属性持续时间
、链接
和类型
,其中链接
可以是精确的时间或指向另一个时间段的链接
,类型
说明了链接
的类型。例如,在已知时间开始的给定时间段
将该时间作为其链接
属性,并且类型
将是时间
。链接到另一个时间段的将把另一个时间段作为其链接
属性,将开始-结束
作为其类型
,依此类推
使用链接
和类型
之间的组合,您还可以支持其他类型的链接,如开始-开始
、结束-开始
或结束-结束
更新
此外,为了在时间段的结束
和下一个时间段的开始之间留出一定的时间间隔,可以添加属性lag
,该属性表示事件之间的任何延迟。因此,例如,如果tf1
和tf2
是时间范围
,因此tf2
必须在tf1
结束后开始5
时间单位,tf2
的属性将是link=tf1
,type=start-end
,持续时间=
和lag=5
。还请注意,滞后
可能是负面的,这会将模型的表达能力扩展到广泛的关系。而@Leandro Caniglia将我的问题巧妙地重新表述为一个对象和属性,基本上,我看到了两个选项:
整个“事件”列表需要在“条件”(开始/结束)下进行评估,以检查相关的“事件”
将“链接”添加到“父级”也会创建到“子级”的链接(无需评估所有挂起事件的链接)
此外:
- “link”属性需要是一个列表或数组才能保存多个引用(例如2:[1,3])
- 与链接属性start_me_on_condition类似,可能需要一个stop_me_on_condition关联(参见Leandro关于
类型的建议,它需要扩展以支持多个链接+类型)
- 独立延迟“事件”可能比
lag
属性更实用
A 11....####222222
B 33333+3#
------------------
T 0123456789ABCDEF