asterisk CDR 数据库的正确 CDR 收集过程
Proper CDR collecting process for asterisk CDR databases
首先对这个复杂的长问题解释感到抱歉。
目前我正在维护几个 asterisk
处理调用的服务器。目前我每小时收集 CDR
到中央数据库。
这里的主要问题是跟踪copied
条记录和new
条记录。在我的设置中,每个 asterisk
CDR
table 都有 id
列作为 主键 。因此,在集中式 table 中,我正在处理这个 id
并维护一个列以保留 server_name
。通过同时使用 id
和 server_name
我可以识别每个 asterisk
服务器最后收集的 id
数量,然后收集所有新的 CDR
高于那个 id
个数.
这个过程并不完美,因为依赖id总是增加是不好的。而且我还需要将此设置转换为 REST API
并为此停止使用 id
。
使用 datetime
运行ge 来选择通话记录也不是一个好主意,因为我每小时收集 CDR
s 并且如果有正在进行的通话 duration
1个多小时。 Asterisk
CDR
在调用结束时插入记录并且 datetime
字段并不总是按升序排列。
我可以使用一个名为 copied
的 flag 并使用上面的 datetime
运行ge 来解决丢失记录的问题,但它不是适合 REST APT
因为它是 stateless 并且不能保留 flags.
现在我 运行 没主意了...想知道是否有更好的解决方案...
希望高手能帮帮我...
这是一个非常具体的场景,但无论如何我都会post我的解决方案。
在分析了一些解决方案后,我想出了一个解决方案。我添加了名为 inserttime
的新列,默认值为 CURRENT_TIMESTAMP
(如果您使用 postgres,那么您可能需要看起来像 statement_timestamp()
)。所以 inserttime
将像 id 和时间变量一样工作,我可以使用 API
使用日期范围搜索 CDR
。
首先对这个复杂的长问题解释感到抱歉。
目前我正在维护几个 asterisk
处理调用的服务器。目前我每小时收集 CDR
到中央数据库。
这里的主要问题是跟踪copied
条记录和new
条记录。在我的设置中,每个 asterisk
CDR
table 都有 id
列作为 主键 。因此,在集中式 table 中,我正在处理这个 id
并维护一个列以保留 server_name
。通过同时使用 id
和 server_name
我可以识别每个 asterisk
服务器最后收集的 id
数量,然后收集所有新的 CDR
高于那个 id
个数.
这个过程并不完美,因为依赖id总是增加是不好的。而且我还需要将此设置转换为 REST API
并为此停止使用 id
。
使用 datetime
运行ge 来选择通话记录也不是一个好主意,因为我每小时收集 CDR
s 并且如果有正在进行的通话 duration
1个多小时。 Asterisk
CDR
在调用结束时插入记录并且 datetime
字段并不总是按升序排列。
我可以使用一个名为 copied
的 flag 并使用上面的 datetime
运行ge 来解决丢失记录的问题,但它不是适合 REST APT
因为它是 stateless 并且不能保留 flags.
现在我 运行 没主意了...想知道是否有更好的解决方案...
希望高手能帮帮我...
这是一个非常具体的场景,但无论如何我都会post我的解决方案。
在分析了一些解决方案后,我想出了一个解决方案。我添加了名为 inserttime
的新列,默认值为 CURRENT_TIMESTAMP
(如果您使用 postgres,那么您可能需要看起来像 statement_timestamp()
)。所以 inserttime
将像 id 和时间变量一样工作,我可以使用 API
使用日期范围搜索 CDR
。