【发布时间】:2018-08-20 15:16:15
【问题描述】:
我有一个关于如何为股票数据库建模以获得最佳性能的问题。
在 SQL Server 或 Oracle 中,执行的每个更新都会生成一个小锁。
我想知道您能告诉我的最佳解决方案是什么
解决方案 1:创建一个包含数量列的产品库存表,并针对每个输入或输出对该列执行 SQL 更新
解决方案 2:为产品库存移动创建一个表,其中对于每个输入,我将执行一个正数的插入,对于每个输出,我将执行一个负数的插入。
在一天结束的时候,我会执行一个过程,用产品库存移动表的“sum”结果更新库存产品的数量 之后,我会删除产品库存移动表中的所有记录
使用 解决方案 1,我的优势在于执行简单的选择以获取产品库存数量,但在白天,我的劣势是由于销售量的许多数量更新而导致锁定很多产品
使用 解决方案 2,我的缺点是,我需要获取产品库存数量,我需要使用产品库存移动表进行查询并进行咨询产品的所有输入和输出的总和,但这样一整天我就不会有任何锁
您对提出的两种解决方案有何看法?
解决方案 2 中描述的建模是否是一种好习惯?
非常感谢
【问题讨论】:
-
音量是多少?两个 db 每秒都可以处理 1000 次事务,而不会出现锁定问题——甚至不会引起注意。
-
听起来像解决方案 2 是所谓的“过早优化”,即做出非标准的设计决策来处理尚未发生的性能问题。除非存在实际的性能问题,否则我会选择 #1。然后我会评估这个问题并确定解决它的最佳方法。
-
在 Oracle 中,更新会创建一个锁(或更确切地说是多个锁),但通常这些锁不会阻塞并发操作(读取或写入)。在 SQL Server 中,锁定的效果取决于:使用隔离级别的快照锁定通常也不是主要问题。当然,这些陈述仅在某些前提下才成立(尤其是短期交易)。
-
对于任何一个 RDBMS 来说,该卷几乎都没有;除非您的收银员之一是 Flash Gordon,否则您无需担心。我们公司有超过 2000 人不断地保存到我们在 SQL Server 上的 CRM 数据库,我们不是一家大型商店,我们很少看到争用
-
阅读数据库规范化。只要您的数据库是规范化的,您就可以拥有 10 个用户或 10,000 多个用户......第一次学习并做对,您将处于良好状态。同样,dba.stackexchange.com 是提供这些主题指导的好地方。
标签: sql-server oracle performance database-performance query-performance