请让我来举个例子来解释一下:每次准备交换或多次连接的数据?
您需要向客户展示某些产品价格的实际信息。最终价格受到客户的好评,他的位置,运送产品的方式以及当前产品的供应商的影响。
产品数量超过100亿。除此之外,你应该以不同的货币显示价格。最后一个问题是,供应商每天都会在他们的产品上每天发送很多价格,由于在那里有很多职位,您可以在整天内申请(更新),而客户不希望等到更新完全他们想知道现在的价格(我知道这是不可能的,但我的意思是 - 客户不应该看到这样的消息:“对不起,你必须等到所有的价格更新”)。
我想要什么
我想将一个表ThePrice (productId, vendorId, usdPrice)
,其中每次使用一个客户使然
select .... from ThePrice p
inner join Vendors v ...
inner join VendorsPrices vp ...
inner join UserRatio ur ...
left join ShippingRatio ...
inner join Currencies ...
inner join PriceDependsOnLocation ...
查询分为两个类似的表
FirstPrice (productId, vendorId, usdPrice, user1Ratio, user2Ratio, user3Ratio, shipppingRatio, euroPrice, localPrice)
and
SecondPrice(productId, vendorId, usdPrice, user1Ratio, user2Ratio, user3Ratio, shipppingRatio, euroPrice, localPrice)
。
凡
userXRatio
- 为客户privelege级别的所有可能的因素。在usdPrice
上增加乘数。 shippingRatio
- 定义客户是否需要运送。在usdPrice
上增加乘数。 euroPrice
,localPrice
- 是以不同货币显示的价格与今日报价相关的价格。
这可能看起来像
if (@OneHourPassed = 1)
select ... from FirstPrice
else
select ... from SecondPrice
--not the best way but just to point out
现在,这一切参数都在每次重新计算,因为价格可以在每一个查询更改,当将被更新以ThePrice
表。这没有缓存。
这意味着我不时收到锁,因为当客户搜索产品时,他们也会在一整天内更新。想象一下 - 一分钟内可能有2000个来自客户的查询,供应商的一两个价格将被更新。 在同一张表中!
我想使用一个准备好的数据:虽然FirstPrice
表用于读取,但SecondPrice
表用于写入 - 更新价格。在某个时刻,他们互换,即在一个小时内。
而我只想知道 - 应用这个机制的机制是什么。使用IF-s?还是有另一种更优雅的方式?
你的问题是非常广泛的,并没有提供很多关于你在这里做什么的细节。 – 2014-10-10 14:18:04
我试图尽可能缩短,因为人们没有时间阅读大量文本。你建议添加什么细节更清晰和简单? – notricky 2014-10-10 15:52:25