大批量号码过滤的问题

asdfjsdkl 2014-07-03 08:54:53
需求是同一个手机,一天只能发送的一条短信。(每天发送量大概是20-30万,最高100万。)
我的想法是做一个号码过滤表用来存储已发送的号码,发送之前去查询数据库,发送后号码录入该表。然后每次发送前先读取该表过滤号码,然后再发送短信。问题1.数量比较大的时候效率会很低,比如已发送100万,现在又提交100万,每一个号码都去查数据库对比,100万号码要过滤好久不知道服务器能不能抗得住?问题2.两个人同时提交任务同时去查询数据库,他们之前有的号码是重复的。此时数据库内的号码是空的,他们两个的号码都没有过滤,这样就一个号码一天发送了两条短信。想过用锁的方法来解决这个问题,那么任务只能一个个的提交那效率就太低了,请问下各位有没有办法解决这个问题?3.有考虑过另外一种方法,就是把当天以发送的号码写入内存,当服务器tomcat停止的时候,把内存中的号码写入文件,那么当天重启后可以从文件中读取已发送的号码,就是不知道这样异常停止服务器会不会没有调用写入文件的方法,导致没有过滤到当天已发送号码?4.请问大家有没有更好的方法可以处理这个问题?
...全文
238 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jerryding09 2014-07-14
  • 打赏
  • 举报
回复
通过写本地文件的方式,读取到内存中利用hashmap存储
zy_think123 2014-07-05
  • 打赏
  • 举报
回复
可以考虑存在硬盘嘛,也就是存在服务器,不用存在数据库呀,可以通过hash算法来实现嘛
疯癫行者 2014-07-04
  • 打赏
  • 举报
回复
问题2,没明白以说的是什么意思,大概猜测是并发的问题。分组分多些,并发就不是问题,不同组和不用同步,同组的同步一下也不费多少时间。 问题1解决了,就不会有问题3和4。
疯癫行者 2014-07-04
  • 打赏
  • 举报
回复
先答问题1:100万,可以考虑分解成多份,比如10份、20份、或者50份,那么每一份的数量就少多了,查询起来应该毫不费力。原因是号码可以天然地分组,而且分组效率很高,所以这种方法是可行的。
asdfjsdkl 2014-07-04
  • 打赏
  • 举报
回复
引用 8 楼 xzy88 的回复:
[quote=引用 5 楼 ding96959 的回复:] [quote=引用 2 楼 stonefeng 的回复:] 先答问题1:100万,可以考虑分解成多份,比如10份、20份、或者50份,那么每一份的数量就少多了,查询起来应该毫不费力。原因是号码可以天然地分组,而且分组效率很高,所以这种方法是可行的。
这个我也有考虑过比如一次任务提交的是100万号码,分解成10次,或者20次去提交。但是,你后面说的号码可以天然分组不懂是什么意思?[/quote] 他说的天然分组,应该指的是,可以做唯一主键和索引,这样查询很快,100万问题不大,只服务器不太垃圾[/quote] 哦!懂了那就是在已发送号码表上建一个唯一主键就可以。谢谢!
网络科技 2014-07-04
  • 打赏
  • 举报
回复
引用 5 楼 ding96959 的回复:
[quote=引用 2 楼 stonefeng 的回复:] 先答问题1:100万,可以考虑分解成多份,比如10份、20份、或者50份,那么每一份的数量就少多了,查询起来应该毫不费力。原因是号码可以天然地分组,而且分组效率很高,所以这种方法是可行的。
这个我也有考虑过比如一次任务提交的是100万号码,分解成10次,或者20次去提交。但是,你后面说的号码可以天然分组不懂是什么意思?[/quote] 他说的天然分组,应该指的是,可以做唯一主键和索引,这样查询很快,100万问题不大,只服务器不太垃圾
asdfjsdkl 2014-07-04
  • 打赏
  • 举报
回复
引用 4 楼 vnvlyp 的回复:
你的意思是有几十万台手机每天各发送一条短信?
群发短信,要求是同一个手机号一天只允许发生一条短信,第二次提交过来就过滤掉,大概每天发送量20-30万 最高100万 可能有多个人同时提交批量号码同时发
asdfjsdkl 2014-07-04
  • 打赏
  • 举报
回复
引用 3 楼 stonefeng 的回复:
问题2,没明白以说的是什么意思,大概猜测是并发的问题。分组分多些,并发就不是问题,不同组和不用同步,同组的同步一下也不费多少时间。 问题1解决了,就不会有问题3和4。
第2个问题是,同时有两个操作员提交任务(他们中有相同的号码),当他们去查询数据库的时候,假如现在数据库里面是空的。他们两个人的号码都可以发生出去,这样就不满足需求了
asdfjsdkl 2014-07-04
  • 打赏
  • 举报
回复
引用 2 楼 stonefeng 的回复:
先答问题1:100万,可以考虑分解成多份,比如10份、20份、或者50份,那么每一份的数量就少多了,查询起来应该毫不费力。原因是号码可以天然地分组,而且分组效率很高,所以这种方法是可行的。
这个我也有考虑过比如一次任务提交的是100万号码,分解成10次,或者20次去提交。但是,你后面说的号码可以天然分组不懂是什么意思?
vnvlyp 2014-07-04
  • 打赏
  • 举报
回复
你的意思是有几十万台手机每天各发送一条短信?
linshuncai 2014-07-03
  • 打赏
  • 举报
回复
等高手,学习学习

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧