我正在开发基于短信的服务平台。在印度,我们有两种不同类型的发送短信的途径——促销和传输。通过促销路线发送的短信必须根据国家维护的数据库 (DND) 进行检查,该数据库目前拥有 231450000 个手机号码。
我的问题是
- 存储此数据的有效方法是什么 (DND)。
- 检查数字是否存在于这些数字中的有效方法是什么。
- 每周两次,电信管理机构会提供这些号码的增量转储 (DND)。如何将转储与现有数据库同步。
- 我应该使用 mysql 来存储此数据(包括手机号码)还是任何其他内存存储?
编辑:
- 每行数据都包含手机号码以及区号、用户偏好等一些偏好
- 每周提供两次的数据转储仅包含添加/删除,而不是全部数据。
- 查找频率可以非常高。实际上,平台发送的每条短信都必须先查询数据(免打扰)。因此,如果平台每秒处理 100 条短信,则它必须每秒对该数据进行 100 次查找。查找只是根据数据库中的数据 (DND) 检查特定手机号码的存在。
- 新的增量数据转储(添加/删除)只需在几个小时内同步,因为转储由电信当局在当天提供,并且必须在午夜 00:00 之前上线。因此,同步数据的总时间约为 3 小时。
示例 DND 转储
提供的 DND 转储样本。这里Opstype
下的A
表示需要添加记录,而D
表示需要删除记录。
最佳答案
戈登是对的。这个应用程序很大而且要求很高,似乎错误或失败可能会让您与客户或当局发生麻烦。
MySQL 可以处理查找负载吗?在具有故障转移功能的负载平衡服务器集群上,它可能可以。但这是一个很大的负担。
另一方面,如果您将此数据集加载到内存数据结构(如 C# 字典或 Java HashMap )中,它可能非常适合运行 64 位操作系统的 16 GiB 服务器。您可以构建一个简单的 Web 服务来回答您的查询。你可以对一堆这样的服务器进行负载平衡,这样如果一个服务器崩溃了,你可以在它重新加载时依赖其他服务器。
您也可以为这些数据使用 redis 或 memcached。这种解决方案可能比同等规模的 MySQL 解决方案更具可扩展性和更易于操作。
如果您很聪明,您将调整此系统的大小以处理稳定的查询负载,该负载至少是您想象的峰值负载大小的 1.5 倍。这将为您提供一些重载余地。
一个大问题:您是否必须恰好在午夜时分立即切换到所有更新的数据?或者您是否可以在获得一些新数据后立即开始使用它?
关于mysql - 检查存在并与数百万行同步数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34577284/