本周早些时候,我问了一个关于在运行时按顺序过滤掉重复值的问题。有一些很好的答案,但我要处理的数据量很慢而且不可行。
目前在我们的数据库中,事件值未被过滤。导致重复的数据值(具有不同的时间戳)。我们需要在运行时处理这些数据,并且在数据库级别处理这些数据的时间成本很高(并且不能将其拉入代码中,因为它在存储过程中被大量使用)导致查询时间长。我们需要一个我们可以查询的数据结构,它过滤掉了这个数据存储,以便在运行时不需要额外的过滤。
目前在我们的数据库中
- 'F07331E4-26EC-41B6-BEC5-002AACA58337', '1', '2008-05-08 04:03:47.000'
- 'F07331E4-26EC-41B6-BEC5-002AACA58337', '0', '2008-05-08 10:02:08.000'
- 'F07331E4-26EC-41B6-BEC5-002AACA58337', '0', '2008-05-09 10:03:24.000' (需要删除) **
- 'F07331E4-26EC-41B6-BEC5-002AACA58337', '1', '2008-05-10 04:05:05.000'
我们需要的
- 'F07331E4-26EC-41B6-BEC5-002AACA58337', '1', '2008-05-08 04:03:47.000'
- 'F07331E4-26EC-41B6-BEC5-002AACA58337', '0', '2008-05-08 10:02:08.000'
- 'F07331E4-26EC-41B6-BEC5-002AACA58337', '1', '2008-05-10 04:51:05.000'
这似乎微不足道,但我们的问题是我们从无线设备获取这些数据,导致数据包乱序,并且我们的网关是多线程的,因此我们无法保证我们获得的值是有序的。可能会出现 4 秒前的“1”和 2 秒前的“0”,但我们已经处理了“1”,因为它是第一个进入的。我们一直在思考如何实现这一点。我们无法将数据与数据库中的最新值进行比较,因为最新的值实际上可能还没有进来,所以要丢弃这些数据,我们会被搞砸,我们的序列可能会完全关闭。所以目前我们存储每个传入的值,并且数据库根据时间自行洗牌。但是单元可以发送 1,1,1,0 并且它是有效的,因为事件仍然处于活动状态,
有任何想法吗?
询问您是否需要任何进一步的信息。
[编辑] PK 不起作用 - 问题是我们的单位实际上发送了不同的时间戳。所以PK不起作用,因为1,1,1是相同的..但是有不同的时间戳。它的类似事件在时间 1 发生,事件在时间 2 仍然发生,它把我们两个都发回......相同的值不同的时间。