这就是现在正在发生的事情,我需要一些智慧。
我有一个Android应用程序,大约每10分钟使用intentservice调用PHP代码。PHP代码应该更新一个MySQL表中单行中的一列。现在很明显,随着使用App的用户增长到大约3500人,我认为它不会达到这个数字(因为它只是我的一个小项目),要处理的并发请求的数量呈指数级增长,死锁情况发生,mysql对此表列的更新间歇性地失败。数据库引擎是AWS RDS上的InnoDB。
更新表的该行中的那一列是至关重要的,如果不是实时的,那么就必须发生。
什么是可扩展的解决方案,即使发出请求的用户数量增加到5,000- 50000,此更新也可以以某种方式以干净的方式处理。
请随时向我询问您可能需要的任何其他信息。
谢谢你的帮助。
更多信息(示例)
为了更好地描述这个问题,让我给您举个例子。假设我需要更新的一行是一个广告商从一个网站提交的广告,该网站的预算列中有该广告的预算。现在,每当Android手机出现印象或点击时,我都会将印象和点击写在两个单独的表格中,这对每个用户的每个广告都是不同的,但在此之后,对于每个印象,每次点击都是高并发发生的,我仍然需要更新广告表中那个不同广告行中的预算列。这就是问题所在。
发布于 2011-08-17 23:59:35
您可能需要重新设计模式,以便可以为每个用户更新(或插入)一行,而不是为每个用户更新(或插入)相同的行。
发布于 2011-08-18 00:39:47
添加一个单独的表来跟踪点击,其中只有广告商和活动的列,并带有时间戳。
每次单击时插入一行(不应锁定表格)
每隔X分钟在服务器上运行一个脚本,该脚本编译每个广告商的点击量,并删除“点击”表中较旧的条目。
发布于 2011-08-18 00:45:06
您有两个表:广告信息ID Advertiser Budget isActive (真/假)
点击信息AdvertisementID ClickInfo (DateTime等?)用户(Optinal?)
我假设有一个预先计算好的每次点击的成本?如果是这样,只需执行一个ON UPDATE触发器,该触发器调用一个函数,获取在点击信息表中找到advertsiementID的次数,并将其乘以每次点击的成本。如果它等于或超出预算,只需将isACtive设置为false。让你的应用程序只拉出isActive为true的广告。
这个建议做了大量的假设,但它只是一种选择。
https://stackoverflow.com/questions/7095815
复制相似问题