【发布时间】:2015-07-14 21:27:24
【问题描述】:
我有一个名为 AD 的 SQL Server 表,其中要查看的广告存储为
create table Sponsors.AD
(
ADID varchar(40) primary key,
SponsorID varchar(30),
PurchasedViews int , --How many views the ad must reach before it is disabled
CurrentViewCount int, --Keeps track of how many views the ad has gotten
{...}
Active bit -- for easier checking of whether the AD still has clicks to give
)
这会馈送到一个网页中,要访问一项功能,用户首先需要查看广告。用户可以从显示三个选项的菜单中选择一个广告[他们选择一个,显示广告的媒体并且在结束时解锁该功能]。
在他们查看广告后,其CurrentViewCount 应更新(增加 1)。
这是由一个包含对表的更新调用的存储过程处理的 - 与为选项菜单随机获取 3 个广告的存储过程分开 - 但我正在寻找有关如何解决同步问题的建议所有并发的AD 视图 - 可能会发生这种情况
- 两个或更多用户在他们的 3-choice-menu 中有相同的广告
- 两个或更多用户同时观看同一个广告
1 和 2 本身不是问题,但如果广告距离设置的最大值只有一次点击,则可能会出现问题。
我认为解决此问题的一种方法是将活动标志设置为 false,如果广告在 3 选项菜单中显示时距离其目标只有一次点击,并且如果用户没有点击它,该标志将被重置为 true - 但随后我需要处理用户退出选项对话或断开连接、超时等情况。我觉得必须有更好的方法。
我听到的另一个建议是,当广告被召唤到 3 选项菜单时自动增加计数器,但这比其他的开销更大,并且会遇到同样的问题。
锁定表格是绝对不可行的,除非我们想一次只提供一个广告视图 - 所以我什至没有考虑。
我确信之前已经讨论过类似的内容,但不知道要搜索哪些关键字/等以找到更多相关信息。
【问题讨论】:
-
广告展示次数比购买次数多几倍真的如此重要吗?虽然最有可能保证确切的视图数量,但实施起来可能相当困难。粗略地说,你有多少同时用户,总共有多少广告?换句话说,同一个广告同时展示给 1、2、3、4 等用户的几率有多大?
-
如果您使用活动标志,那么您是说只有在活动标志为假时才能将其显示为选项?这是否意味着对于任何广告,它只显示给一个用户?更一般地说,您应该在找到解决方案之前明确要求。特别是,您是否希望将广告作为选项同时显示给多个用户。例如,如果广告还有 100 次观看,您是否希望将其作为选项显示给 5 位用户?
-
首先,明确需求。有很多选择:
-
似乎没有办法避免广告选项选择在某些时候变得无效的可能性。您可以施加固定的时间限制,或者如果广告浏览量达到其限制,您可以说它变得无效。然后决定如果广告选项变得无效该怎么办。可能无法避免让用户点击无效的广告,但您可以通过从前端删除它来避免这种情况发生。对于无效广告,您可以让用户通过或再次显示选项。一旦你澄清我会提出一个解决方案。
-
这是个好问题。你见过我的cmets吗?
标签: sql sql-server database stored-procedures