【发布时间】:2018-03-25 04:16:41
【问题描述】:
我们有一个系统,按照先到先得的原则为客户分配产品。
我们的产品表包含一个从零开始的递增主键,我们使用它来跟踪已分配的产品数量,即用户预订产品并分配 1,下一个用户获得 2,以此类推。
问题在于,可能有数十万用户在任何给定时间访问系统。所有人都将打到这张桌子。
由于我们需要确保每个客户只分配一个产品并跟踪分配了多少产品,我们为每个访问系统的客户使用行锁,以确保他们在下一个客户点击之前写入表系统 - 即执行先到先得的规则。
我们担心进入 SQL Server 2008 企业版的每个请求的处理时间和行锁的瓶颈。
我们不能使用多台服务器,因为我们需要确保主键的完整性,因此任何需要复制的东西都无法正常工作。
有没有人知道在处理一个数据库表上的大量请求时特别有效的任何好的解决方案?
更多信息:
有问题的表基本上只包含两个字段 - ID 和 CustomerID。解决方案是免费赠送一百万种产品——因此期望高需求以及为什么使用递增的主键作为键对我们来说是有意义的——一旦键达到一百万,就没有更多的客户可以注册。此外,产品都不同,因此分配正确的密钥很重要,例如前 100 位进入的客户收到的产品价值高于后 100 位等
【问题讨论】:
-
明显的第一个问题;您是否从获取密钥的事务中剥离了所有其他内容?例如。在尝试获取钥匙之前,您知道所有您需要知道的事情,在做其他事情之前去桌子拿钥匙并解锁?
-
嗨,卡尔,是的,没错。其他所有内容都去掉了 - 使交易尽可能轻量级 - 只需获取客户 ID,然后进行插入并向用户显示新的主键 - 恭喜,您是客户 xxxxx,您将获得免费奖品。
标签: sql sql-server database