我在一家软件商店工作,该商店有一个内部预测拨号产品,我们需要实现一个解决方案,以遵守请勿呼叫列表。
基本上,我有一个数据库,其中包含我需要呼叫的客户/潜在客户,另一个数据库中包含我无法呼叫的电话号码。由于系统是一个预测拨号器,基于操作的性能、平均时间和其他因素,它将对每个登录的系统用户拨打或多或少的呼叫。通常,这个“神奇”数字大约是每个已记录的座席3-4个呼叫。
预测拨号器的电话号码存储库是PostgreSQL数据库。预测拨号器从数据库中选取一串号码,并向pbx发送命令以拨打该串号码,然后业务逻辑继续将有效呼叫转移到呼叫中心职员等(这是无关紧要的,因为我的问题在呼叫之前)。
我需要实现请勿呼叫列表功能。这份请勿来电清单将由政府机构以CSV文件的形式每天提供给我们公司。每次我收到新的CSV文件时,我都必须清除旧的请勿呼叫列表,并将新的列表放在适当的位置。
我实现它的第一个想法是进行批处理,将请勿呼叫列表与我当前的客户数据库进行交叉引用。但我认为,根据两个数据库的大小,交叉引用将是非常高性能密集型的,有时不可能在一夜之间完成。我以前遇到过这种批处理问题,这不是一件好事。
我的第二个想法是在考虑大型机构如何处理高性能和高吞吐量的授权系统时产生的,比如信用卡或用户身份验证/授权。我认为为请勿呼叫列表号码创建身份验证服务,并更改预测拨号器的算法,以便在拨号前根据此授权服务检查每个号码,这将是很好的做法。
因为我只是在这里虚构,我不知道哪个想法是最好的,或者是我完全错了,应该转向另一个方向。所以,我的问题是:你的建议是什么?是否将不调用CSV文件存储在内存中?使用LDAP?使用MySQL?PostgreSQL?做批处理的事情?还是我真的完蛋了?
我知道我不是世界上第一个有这种问题的人,所以请告诉我。
发布于 2009-04-17 20:17:21
您的挑战是从大量可能的条目中查找大量条目,这让我想起了DNS black/block lists。
DNS rbldnsd是一个小而快速的
守护程序,是专门为DNSBL区域服务的。这个守护进程的灵感来自于djbdns包中的Dan J.Bernstein的rbldns程序。More rbldnsd, from Google
它支持基于名称的区域,因此您可以将数字列表转换为ENUM样式的URIs例如+1-555-4242变成2.4.2.4.5.5.5.1.e164.arpa。然后将其输入到rbldnsd数据文件中,编译到内存中,并像访问任何其他块列表一样进行访问。默认条目表示可以调用,或者如果该条目存在,则会为其提供一个DoNotCall条目。
不过,您仍然会遇到批处理转换的问题,尽管这将是一个比较简单的脚本,使用Perl或AWK很有可能做到这一点。您还可以将传入的CSV文件拆分为多个文件,以便进行并行处理和最终合并。
https://stackoverflow.com/questions/760727
复制相似问题