asterisk CDR 数据库的正确 CDR 收集过程

Proper CDR collecting process for asterisk CDR databases

首先对这个复杂的长问题解释感到抱歉。

目前我正在维护几个 asterisk 处理调用的服务器。目前我每小时收集 CDR 到中央数据库。

这里的主要问题是跟踪copied条记录和new条记录。在我的设置中,每个 asterisk CDR table 都有 id 列作为 主键 。因此,在集中式 table 中,我正在处理这个 id 并维护一个列以保留 server_name。通过同时使用 idserver_name 我可以识别每个 asterisk 服务器最后收集的 id 数量,然后收集所有新的 CDR 高于那个 id个数.

这个过程并不完美,因为依赖id总是增加是不好的。而且我还需要将此设置转换为 REST API 并为此停止使用 id

使用 datetime 运行ge 来选择通话记录也不是一个好主意,因为我每小时收集 CDRs 并且如果有正在进行的通话 duration 1个多小时。 Asterisk CDR 在调用结束时插入记录并且 datetime 字段并不总是按升序排列。

我可以使用一个名为 copiedflag 并使用上面的 datetime 运行ge 来解决丢失记录的问题,但它不是适合 REST APT 因为它是 stateless 并且不能保留 flags.

现在我 运行 没主意了...想知道是否有更好的解决方案...

希望高手能帮帮我...

这是一个非常具体的场景,但无论如何我都会post我的解决方案。

在分析了一些解决方案后,我想出了一个解决方案。我添加了名为 inserttime 的新列,默认值为 CURRENT_TIMESTAMP(如果您使用 postgres,那么您可能需要看起来像 statement_timestamp())。所以 inserttime 将像 id 和时间变量一样工作,我可以使用 API 使用日期范围搜索 CDR