mysql - 检查存在并与数百万行同步数据

标签 mysql database synchronization

我正在开发基于短信的服务平台。在印度,我们有两种不同类型的发送短信的途径——促销和传输。通过促销路线发送的短信必须根据国家维护的数据库 (DND) 进行检查,该数据库目前拥有 231450000 个手机号码。

我的问题是

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

编辑:

  1. 每行数据都包含手机号码以及区号、用户偏好等一些偏好
  2. 每周提供两次的数据转储仅包含添加/删除,而不是全部数据。
  3. 查找频率可以非常高。实际上,平台发送的每条短信都必须先查询数据(免打扰)。因此,如果平台每秒处理 100 条短信,则它必须每秒对该数据进行 100 次查找。查找只是根据数据库中的数据 (DND) 检查特定手机号码的存在。
  4. 新的增量数据转储(添加/删除)只需在几个小时内同步,因为转储由电信当局在当天提供,并且必须在午夜 00:00 之前上线。因此,同步数据的总时间约为 3 小时。

示例 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 转储样本。这里Opstype下的A表示需要添加记录,而D表示需要删除记录。

最佳答案

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

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

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

您也可以为这些数据使用 redis 或 memcached。这种解决方案可能比同等规模的 MySQL 解决方案更具可扩展性和更易于操作。

如果您很聪明,您将调整此系统的大小以处理稳定的查询负载,该负载至少是您想象的峰值负载大小的 1.5 倍。这将为您提供一些重载余地。

一个大问题:您是否必须恰好在午夜时分立即切换到所有更新的数据?或者您是否可以在获得一些新数据后立即开始使用它?

关于mysql - 检查存在并与数百万行同步数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34577284/

相关文章:

mysql - 为 select 中返回的空字段设置默认值

php - 执行Mysql命令时出现错误 "Trying to get property of non-object in C:\xampp\htdocs\testm.php on line 5"

database - 数据仓库 - 如何存储created_time、created_date、complete_time、complete_date

c# - 在 C# 中使用 DirSync 不仅返回更改的值

mysql - 在mysql中搜索子字符串

MySQL按特定数据条目对数据进行排序

database - 使用复合主键元素的 SELECT 性能

mysql - 如何获得具有特定关系的行的平均值

swift - 在 OSX 上快速处理同步

Java:需要同步 ExecutorService 吗?