检查数百万行的存在和同步数据

时间:2016-01-03 13:58:21

标签: mysql database synchronization

我正在开发基于短信的服务平台。在印度,我们有两种不同类型的路由发送短信 - 促销和促销。反式。通过促销路线发送的短信必须与国家维护的数据库(DND)进行核对,该数据库目前拥有231450000个手机号码。

我的问题是

  1. 存储此数据(DND)的有效方法是什么。
  2. 检查这些数字是否存在于这些数字中的有效方法是什么。
  3. 一周两次,这些号码(DND)的增量转储由电信管理局提供。如何将转储与现有数据库同步。
  4. 我应该使用mysql存储这些数据,包括手机号码或任何其他内存存储?
  5. 编辑:

    1. 每一行数据都包含手机号码以及区号,用户偏好等少数偏好
    2. 每周提供两次的数据转储仅包含添加/删除,而不包含整个数据。
    3. 查找频率可能非常大。实际上,从平台发送的每条SMS都必须首先对数据(DND)进行查找。因此,如果平台每秒处理100个sms,则必须每秒对该数据进行100次查找。查找只是根据数据库中的数据(DND)检查特定移动号码的存在。
    4. 新的增量数据转储(添加/删除)必须在几个小时内同步,因为转储由电信管理局在当天提供,同样必须在午夜00:00之前上线。因此,同步数据的总时间约为3小时。
    5. DND转储示例

      Sample of DND dump provided. Here <code>A</code> under <code>Opstype</code> means record has to be added, while as <code>D</code> means record has to be deleted.

      提供的DND转储示例。 A下的Opstype表示必须添加记录,而D表示必须删除记录。

1 个答案:

答案 0 :(得分:1)

戈登是对的。这个应用程序庞大而且要求很高,似乎错误或失败可能会让您与客户或当局陷入困境。

MySQL可以处理查找加载吗?在具有故障转移的负载平衡服务器集群上,可能它可以。但这是一个很大的负担。

另一方面,如果将此数据集加载到内存数据结构(如C#字典或Java哈希映射)中,它可能很适合运行64位操作系统的16 GiB服务器。您可以构建一个简单的Web服务来回答您的查询。您可以对这些服务器进行负载均衡,因此如果一个服务器崩溃,您可以在重新加载时依赖其他服务器。

您还可以对此数据使用redis或memcached。与类似规模的MySQL解决方案相比,这种解决方案可能更具可扩展性,更易于操作。

如果您是明智的,那么您将调整此系统的大小以处理稳定的查询负载,其大小至少是您想象的峰值负载的1.5倍。这会给你一些超负荷的余地。

一个很大的问题:您是否必须在午夜准确地切换到更新的数据?或者您可以在拥有新数据后立即开始使用它们吗?