English 中文(简体)
金库交易的实际成本如何?
原标题:What is the real cost of a SQL transaction?

这就需要背景。 I m 建立一个网站(ASP.NET/VB.NET,有服务器背端),接收资金的申请,这一表格在信息领域接触了3人。 由于这三人(姓名、电子邮件、电话)的情况相同,我选择在一份与申请分开的表格中储存接触信息。 在申请表中,三个联系人中每个都有一个身份证地址,在联系表中注明联系人。

然而,这在我履行《世界人权宣言》时是一个令人感兴趣的问题/问题。 我认为,为申请和所有三个交易建立、更新和检索信息的唯一途径,都需要非常复杂的储存程序。 换言之,通过多种交易检索这一信息要简单得多(对我而言)。 然而,由于这一信息从来就不需要独立,因此我会进行多种交易,以获得一个申请的信息。

因此,我的问题是:

  1. Is this design overkill? There will never be more than three contact people per application, and there MUST be exactly three. Am I over-complicating by removing this information to a separate table?
  2. What is the real cost of doing several SQL transactions vs. writing my complex stored procedures and only needing one transaction?
  3. Generally speaking, what is the cost of a SQL transaction to a web application using ADO.NET?

得益于这一长期减少的解释。

* 《<>>>><>EDIT>/em>*

在阅读你的一些答复之后,我似乎使用了“交易”这一错误。 我的“实际上是奇怪的,是在整个单一关系中执行多个查询的费用,而不是进行一个查询。 误解。

最佳回答

需要进行交易,将数据库从一个前后一致的国家转移到另一个一致的国家。 此处的一贯性适用于数据库的应用观点。 典型的例子是两个账户之间的货币转账:你必须借一个账户,贷记另一个账户。 在这两个业务之间,数据库不一致,有些钱已经消失(从一个账户借出的金额是no where)。 但在交易结束时,数据库再次一致。 你们需要一笔交易,以跨越这两个业务,保护读者不要看到一个不一致的数据库,并确保在发生坠毁事件时有一个一致的数据库。

你们说,为了在单一交易中处理你逻辑中的多个项目,需要复杂的程序。 交易范围与请求范围不符:客户可以启动交易,在3个电话中援引3个程序,然后进行交易。not要求所有业务采用单一存储程序。

因此,交易应当而不是引诱大量程序管理费用。 事实上,一项程序不会影响交易。 如果在交易中以及在援引交易/交易时,应有正确的书面程序。 见Exception Hand and nested trade, 用于在有交易的情况下正确行事的程序模板and

最后,交易的费用是real? Transaction write data (read aren t really needing communications) and as such they lock the rows amended. 阅读通常会阻碍阅读这些被封锁的行文,然后交易时间越长,交易时间越长,越长,就越大。 但确实有一个简单的解决办法:简单明了。 缩略语实际上是一种魔法粉尘,它们允许通过阻挡的浏览器提前unhindered,因为读者总是能够读到阻碍浏览的最新版本prior。 见Using Row FCCC/SBI/2008/L/A。

因此,结论很简单:transactions no cost。 简而言之,there不是交易的替代物。 这不是一个十大问题,即Y......是一个十大问题,即只有正确的备选案文”。

<>上>

在您的编辑后:具有多重要求的成本标识与一项要求can be重大。 服务器的四舍五入(即发出开放式连接请求)有固定成本。 如果你进行多次回旋转,那么你就应每个要求支付这一固定费用。 如果你提出单一要求,采用多种程序,则这种固定费用只支付一次。 在All热系统上,这一差异是可以衡量的,并具有总体业绩的成本。 但我谈论的是really热系统,如每秒数千次申请。 解决办法通常不是使程序复杂化,而是在一个请求中发出多重程序要求:

SqlCommand cmd = new SqlCommand(@"
exec usp_firstProc @arg1, @arg2;
exec usp_secondProc @arg2, @arg3;
exec usp_thirdProc @arg1, @arg3;", connection);
cmd.Parameters.Add("@arg1", someValue);
...
cmd.ExecuteNonQuery();

但是,我必须说,除非你的工作量达到,否则实际上不需要这一解决办法。 作为后发规则,对于1 000项要求/要求下的任何事项,我将考虑明确守则的好处,以超过业绩效益。

每项请求的新联系,即使您必须<>开放>。 木in双管为really,可以数百条ms计。 但解决办法是三角的:使用连接(由于ADO.Net的违约而得以实现),并且不会过早放弃连接,在完成整个工作单位之前保持连接和再使用。

问题回答
  1. This is not overkill. This is a good normalization 以及 a good application of the Don t-Repeat-Yourself principle. The requirements of the system may change 以及 you may need 2 or 4 contacts in the future instead of 3.
  2. You don t need to do any complex stored procedures. You re not doing anything out of the ordinary here. You don t need stored procedures at all.
  3. Don t know.

当你说“交易”时,我认为你只是“吗?” 当我收到一个申请的数据时,我将使用两个单独的简单查询:

SELECT *
  FROM application

以及

SELECT *
  FROM contact

它有两个不同的问题,但大事。 更重要的是,设计数据库的方式是有意义的。

您在此重复使用这一术语,只是不正确。 我认为,你再次提到的只是一个简单的数据库查询,美国合作署的会计事项。

尽管如此,很难说。 由于违约,连接集合将防止需要打开三至四个单独的连接线。

您甚至可能不需要多重查询来获取数据,并且可以加入两个表格以检索数据,例如:

SELECT app.field1, app,field2, contact1.name, contact2.name, contact3.name
FROM Applications AS app
INNER JOIN Contacts AS contact1 ON app.contact1ID = contact1.id
INNER JOIN Contacts AS contact2 ON app.contact2ID = contact2.id
INNER JOIN Contacts AS contact3 ON app.contact3ID = contact3.id

或类似情况,鉴于你的情况(从估计数字中删除新的领域,从每个接触表上退回更多的数据等)。 如果对表格进行适当索引编制,调查就会非常迅速,而且很可能不会影响业绩。

如果你重新插入/更新数据,那么,是,你需要多处问询,但选择数据就会出现。

当然,其他选择是将数据重新列入原始申请表,首先取消对第二次申请表的需求。 此时此刻,不需要额外加入或其它任何东西。

你们的共同思想......

如果你目前的设计是两个表,第一个表(附录)是

ID, Liaison_id1,contact_id2,contact_id3,otherinfo

第二张联系单是:

联系人

这一格式的最大优势是,如果您有1个与多种应用的联系。 Conatact Bob是8个不同配料中的1个联系人,这意味着bob s info只记录一次,而他的身份证只记录在申请表上。 最大限制是每份申请有3个接触点,永久编码。

Alternatively..application can be defined as application_ID, Info and conact as application_ID, id_sequence, info

这种设置的好处是,每个申请都可以储存数量有限的接触。

虽然满足你的需要的一切......如果你有3个接触点,那么这里的第二个选择是不理解。 如果你不计划围绕1 000多份记录,把所有信息储存在一张桌上,就是一个最坏的想法(选择一个主要消除多余的数据)。 在某些情况下,回答问题1.it过于熟练,但答案将取决于您目前的要求和未来的要求。 从最佳做法设计来看,2个表格是优先的。

只是对问题的评论 # 2 - 壳体为较简单的堆积物...... 我可以认为,这过于复杂。 你也许可以形成一种可更新的观点(确保可能出现哪些限制或问题)。

除纯粹处理费用外,每单项询问都会给你一个客户数据库服务器的往返时间。 因此,如果你能够处理简单的单一询问,你可以节省四舍五入。

利用1个储存的程序做所有事情,你只需要打开1个q。

贵国的网络图中每一变量在储存程序中的参数上(包括您对新仪器的隐蔽接触和应用钥匙)

在程序方面,如果记录的关键为0,程序就会增加数据库的记录,并迅速利用范围(身份)检索钥匙。 如果你向程序派出非零钥匙,则更新记录。 该程序然后将所有数据退回,所有储存的程序变量都申报为产出。

那么,你就可以在q开始/修改交易中总结程序,这样它就掌握了全部或全部q。





相关问题
SQL SubQuery getting particular column

I noticed that there were some threads with similar questions, and I did look through them but did not really get a convincing answer. Here s my question: The subquery below returns a Table with 3 ...

难以执行 REGEXP_SUBSTR

I m 查询Oracle 10g。 我有两张表格(样本数据见下文)。 i m 试图提取一些领域

SQL Query Shortcuts

What are some cool SQL shorthands that you know of? For example, something I learned today is you can specify to group by an index: SELECT col1, col2 FROM table GROUP BY 2 This will group by col2

PHP array callback functions for cleaning output

I have an array of output from a database. I am wondering what the cleanest way to filter the values is example array Array ( [0] => Array ( [title] => title 1 ...

OracleParameter and DBNull.Value

we have a table in an Oracle Database which contains a column with the type Char(3 Byte). Now we use a parameterized sql to select some rows with a DBNull.Value and it doesn t work: OracleCommand ...

Running numbers in SQL

I have a SQL-statement like this: SELECT name FROM users WHERE deleted = 0; How can i create a result set with a running number in the first row? So the result would look like this: 1 Name_1 2 ...

How to get SQL queries for each user where env is production

I’m developing an application dedicated to generate statistical reports, I would like that user after saving their stat report they save sql queries too. To do that I wrote the following module: ...

热门标签