首先,对这个复杂的长期问题的解释感到抱歉。
目前,我正在维护几个处理调用的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,因为它是无状态的,不能保留标志。
现在我没有主意了..。想知道有没有更好的解决办法..。
希望有专家能帮我..。
发布于 2017-10-26 04:46:35
这是一个非常具体的场景,但无论如何,我将在这里发布我的解决方案。
在分析了一些解决方案后,我想出了一个解决方案。我添加了名为inserttime的新列,其默认值为CURRENT_TIMESTAMP (如果使用postgres,则可能需要将其视为statement_timestamp())。因此,inserttime的作用就像id和时间变量一样,有些我可以使用API使用日期范围搜索CDR。
https://stackoverflow.com/questions/46882462
复制相似问题