我有一个时间序列数据表,对于几乎所有查询,我希望选择按收集时间排序的数据。我确实有一个时间戳列,但我不想为此使用实际的时间戳,因为如果两个条目具有相同的时间戳,那么我能够按照它们被收集的顺序对它们进行排序是至关重要的,这是我在插入时间。
我当前的模式只有一个时间戳列。我将如何更改我的架构以确保我可以根据收集/插入时间进行排序,并确保按收集/插入顺序进行查询是有效的?
我有一个时间序列数据表,对于几乎所有查询,我希望选择按收集时间排序的数据。我确实有一个时间戳列,但我不想为此使用实际的时间戳,因为如果两个条目具有相同的时间戳,那么我能够按照它们被收集的顺序对它们进行排序是至关重要的,这是我在插入时间。
我当前的模式只有一个时间戳列。我将如何更改我的架构以确保我可以根据收集/插入时间进行排序,并确保按收集/插入顺序进行查询是有效的?
根据序列(即序列)添加列,并在(timestamp_column,serial_column)上创建索引。然后,您可以通过执行以下操作来获得插入订单(或多或少):
ORDER BY timestamp_column, serial_column;
您可以使用名为 insert_order 的 SERIAL 列。这样就不会有两行具有相同的值。但是,我不确定您是否可以实现绝对时间顺序的要求。
例如,假设有两个事务,T1 和 T2,并且它们确实同时发生,并且您在具有多个处理器的机器上运行,所以实际上 T1 和 T2 都在完全相同的时刻进行了插入。这是您关心的案例吗?您的问题没有足够的信息确切地知道。
同样对于序列列,您会遇到间隙问题,例如 T1 云抓取序列值 14 并且 T2 可以抓取值 15,然后 T1 回滚而 T2 不会,因此您必须期望 insert_order 列中可能有间隙.