首先对这个复杂的长问题的解释感到抱歉。
目前,我正在维护几个处理调用的asterisk
服务器。目前我每小时都在收集CDR
到集中式数据库。
这里的主要问题是跟踪copied
记录和new
记录。在我的设置中,每个asterisk
CDR
表都有id
列作为主键。所以在集中式表中,我处理这个id
,并维护一列来保留server_name
。通过使用id
和server_name
,我可以识别每个asterisk
服务器的最后收集的id
编号,然后收集所有高于该id
编号的新CDR
。
这个过程并不完美,因为依赖id总是会增加是不好的。此外,我还需要将此设置转换为REST API
,并停止为此使用id
。
使用datetime
范围来选择通话记录也不是一个好主意,因为我每小时都在收集CDR
的通话记录,如果duration
的通话时间超过1小时怎么办。Asterisk
CDR
在调用结束时插入记录,并且datetime
字段并不总是按升序排列。
我可以使用一个名为copied
的标志,并使用以上的datetime
范围来解决丢失记录的问题,但它不适合REST APT
,因为它是无状态并且不能保留标记。
现在我没什么想法了。。。想知道有没有更好的解决方案。。。
希望有专家能帮我…
这是一个非常具体的场景,但无论如何,我将在这里发布我的解决方案。
在分析了一些解决方案后,我提出了一个解决方案。我添加了一个名为inserttime
的新列,默认值为CURRENT_TIMESTAMP
(如果使用postgres,则可能需要查找为statement_timestamp()
)。所以inserttime
的作用就像id和时间变量一样——我可以使用API
来使用日期范围搜索CDR
。