database - 高可用性授权服务的正确解决方案是什么?

标签 database performance batch-processing high-availability

我在一家软件商店工作,那里有一个内部预测拨号器产品,我们需要实现一个解决方案来遵守 DO-NOT-CALL 列表。

基本上,我有一个包含我需要调用的客户/潜在客户的数据库,以及另一个包含我无法调用的电话号码的数据库。由于该系统是一个预测拨号器,基于操作的性能、时间平均值和其他东西,它会为每个登录的系统用户调用或多或少的电话。通常这个“神奇”数字是每个登录代理大约 3 - 4 个调用。

预测拨号器的电话号码存储库是一个 PostgreSQL 数据库。预测拨号器从数据库中选择一堆号码并向 pbx 发送一个命令来调用这串号码,然后业务逻辑继续将有效调用转移到调用中心职员,等等(这与我无关问题出在调用之前)。

我需要实现拒接电话列表功能。该拒接电话 list 将由政府机构以 CSV 文件的形式每天提供给我们公司。每次我收到一个新的 CSV 文件时,我都必须清除旧的请勿来电列表,并将新的放到适当的位置。

我第一个想到实现它是做一个批处理,交叉引用 DO NOT CALL LIST 与我当前的客户数据库。但我认为,根据两个数据库的大小,交叉引用会非常耗费性能,有时无法在一夜之间完成。我以前在批处理中遇到过这种问题,这不是一件好事。

当我想到大型机构如何处理高性能和高吞吐量的授权系统(例如信用卡或用户身份验证/授权)时,我想到了第二个想法。我认为为 DO NOT CALL LIST 号码创建身份验证服务,并更改我的预测拨号器的算法以在拨号前根据此授权服务检查每个号码会很整洁。

因为我只是在这里胡说八道,所以我不知道哪个想法是最好的,或者如果我完全错了,应该转向另一个方向。所以,我的问题是:您的建议是什么?将 DO NOT CALL CSV 文件存储在内存中?使用 LDAP?使用MySQL?数据库?做批处理的事?或者我肯定被搞砸了?

我知道我不是世界上第一个遇到这种问题的人,所以请赐教。

最佳答案

您的挑战是从大量可能的条目中找到多个条目,这让我想起了 DNS black/block lists .

rbldnsd is a small and fast DNS daemon which is especially made to serve DNSBL zones. This daemon was inspired by Dan J. Bernstein's rbldns program found in the djbdns package. More rbldnsd, from Google

它支持基于名称的区域,因此您可以将数字列表转换为 ENUM 样式的 URI——例如 +1-555-4242 变为 2.4.2.4.5.5.5.1.e164.arpa。然后将其输入到 rbldnsd 数据文件中,编译到内存中并像任何其他阻止列表一样访问。默认条目表示可以调用,或者如果该条目存在,它将被赋予一个 DoNotCall 条目。

您仍然遇到批量转换问题,尽管它会是一个稍微简单一些的脚本,很可能使用 Perl 或 AWK 来处理。您还可以将传入的 CSV 文件拆分为多个文件以进行并行处理和最终合并。

关于database - 高可用性授权服务的正确解决方案是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/760727/

相关文章:

Java 并行上传

java - Spring 批处理 :How to monitor currently running jobs & show progress on jsp page

linux - 在 Linux 中将 Matlab 脚本作为批处理作业运行

php - 我无法在 php 中设置主页面/详细信息页面

java - 将 key 保存到 derby 数据库

database - Oracle DB Express 11 - 如何显示 SGA PGA 信息?

c++ - 不受主存储器约束的函数所需的复杂性是多少?

c++ - VM解释器-权衡性能的优点和缺点:较大的指令集/调度循环

windows - 如何找出唤醒我的电脑的所有 Windows 计划任务?

database - Freebase:什么数据转储文件包含 "imdb_id"?