我有一个问题,关于如何才能对库存数据库进行建模,以获得最佳性能。
在SQL Server或Oracle中,每次执行的更新都会产生一点锁定。
我想知道什么是您能告诉我的最佳解决方案
解决方案1 :创建带有数量列的产品库存表,并针对每个输入或输出针对此列执行SQL更新
解决方案2 :为产品库存移动创建一张表格,其中,对于每个输入我将执行一个正数插入,而对于每个输出我将执行一个负数插入。
最终,我将使用产品库存移动表的结果“ 总和”执行更新库存产品数量的过程 之后,我将删除产品库存移动表中的所有记录
使用解决方案1 ,我将具有执行简单选择以获取产品库存数量的优势,但由于存在有关已售出产品的许多数量更新,我白天将具有很多锁定的缺点产品
在解决方案2 下,当我需要获取产品库存数量时,我将有一个缺点,我需要使用产品库存移动表的联接进行查询,并进行咨询产品的所有输入和输出的总和,但是通过这种方式,我整天都不会有任何锁
您对提出的两种解决方案有何看法?
进行解决方案2 中所述的建模是一种好习惯吗?
非常感谢您
答案 0 :(得分:0)
这里有许多假设,都可能解决“假设”问题。您没有数字可以自信地说出这两种设计都会导致问题。我们也不知道您的硬件规格。
首先进行一些尽职调查,然后算出您每天或每月要处理多少事务,以及在给定的时间(分钟/小时)将要发生多少读写?一旦获得了这些数字(即使它们不准确,您也应该有所活动),就可以为两个解决方案的托管数据库(或类似数据库)的实际实例运行一些基准测试,并亲自观察哪些性能更好。
以3倍或5倍的读/写重复该练习,并再次进行比较,以便为将来的增长做好准备。
通过一系列假设做出的决定会导致设计很固执,总是导致选择不佳。始终使用数据来驱动您的决策并验证您的假设。
PS:从这里的经验谈起。考虑到我们要处理非常大的事务,通常我们有一个汇总表和一个明细表,并在新记录插入明细等中时使用触发器来更新汇总表中的计数。
祝你好运。