0

我们的 Windows 窗体应用程序通过 ADO.NET 和 SOAP Web 服务从 SQL Server 的视图中提取记录,并在数据网格中显示它们。我们有几个大约 25,000 行的案例,工作相对顺利,但潜在客户需要在一个列表中包含很多倍。

为了弄清楚我们现在的扩展程度,以及我们可以实际改进的程度(和程度),我想实现一个模拟:让 SQL Server 发送虚构的随机数据,而不是显示实际数据。客户端和传输端基本相同;视图(或至少是基础表)当然会以不同的方式工作。用户指定虚构行的数量(例如 100,000)。

目前,我只想知道客户端需要多长时间来检索和处理数据并准备好显示它。

我想弄清楚的是:如何让 SQL Server 发送此类数据?

我是否:

  1. 创建一个必须预先运行以填充实际表的存储过程?
  2. 创建一个我指向的函数,从而让服务器“实时”生成数据?
  3. 以某种方式复制和/或随机化现有数据?

第一个选项对我来说听起来会产生最接近现实世界的结果。因为数据实际上是“物理存在的”,所以SELECT查询在性能方面与对真实数据的查询非常相似。但是,它会通过其他无意义的操作对服务器征税。假数据也会被备份,因为它会存在于同一个数据库中——当然,除非我在每次运行基准测试后删除数据。

第二个和第三个选项运行实际模拟时对服务器征税,因此可能会产生不切实际的缓慢结果。


此外,我不确定如何创建这些行,而不是使用循环或游标。SELECT top <n> random1(), random2(), […] FROM foo如果foo实际上碰巧有条目,我可以使用<n>,但否则我(显然)只会获得foo碰巧有的行数。AGROUP BY newid()或类似的东西似乎不起作用。

4

4 回答 4

2

对于测试CRM类型表的数据,我强烈推荐fakenamegenerator.com,你可以免费获得40,000个假名字。

于 2008-10-11T17:14:42.357 回答
1

您没有提到您是否使用 SQL Server 2008。如果您使用 2008 并使用数据压缩,请注意随机数据的行为将与真实数据非常不同(更慢)。随机数据更难压缩。

Quest Toad for SQL Server 和 Microsoft Visual Studio Data Dude 都有测试数据生成器,可以为您将假的“真实”数据放入记录中。

于 2008-10-19T00:45:27.417 回答
0

如果您想要可以依赖的结果,则需要使测试场景尽可能真实,这使得选项 1 是迄今为止您的最佳选择。正如您所指出的,如果您使用其他选项获得的结果不够好,您将无法确定这不是由于不同的数据库行为造成的。

如何生成数据在很大程度上取决于问题域。你能从多个客户那里获取数据集并将它们合并成一个大型数据集吗?如果数据是时间序列,那么它可能可以在不同的范围内复制。

于 2008-08-31T17:57:43.780 回答
0

数据通常类似于 CRM,即联系人、项目等。简单地复制数据就可以了(例如,如果我只有 20,000 行,我将复制它们五次以获得我想要的 100,000 行)。另一方面,合并只有在我们从不公开部署基准测试工具的情况下才会起作用,出于明显的隐私原因(当然,除非我对每一列应用一个函数,使原始数据无法修复而无法理解?类似于散列函数, 只是没有过多地修改值的大小)。

要填充行,也许这样的事情会做:

WHILE (SELECT count(1) FROM benchmark) < 100000
  INSERT INTO benchmark
  SELECT TOP 100000 * FROM actualData
于 2008-08-31T18:12:52.277 回答