我们的Windows窗体应用程序通过ADO.NET和SOAP Web服务从SQL Server视图中提取记录,并在数据网格中显示它们。我们有几个案例有大约25,000行,这些行相对顺利,但潜在客户需要在一个列表中有很多次。
为了弄清楚我们现在的扩展程度,以及我们如何(以及多远)实际改进,我想实现一个模拟:让SQL Server发送虚构的随机数据,而不是显示实际数据。客户和运输方面大致相同;视图(或至少是基础表)当然会以不同的方式工作。用户指定虚构行的数量(例如100,000)。
目前,我只是想知道客户端检索和处理数据所需的时间,并准备好显示它。
我想弄清楚的是:我如何让SQL Server发送这样的数据?
我:
第一个选项听起来像是会产生最接近现实世界的结果。因为数据实际上是“物理上存在的”,所以SELECT
查询在性能上与真实数据上的查询非常相似。但是,它会以无意义的操作对服务器征税。假数据也将被备份,因为它将存在于同一个数据库中 - 当然,除非我在每次基准运行后删除数据。
第二个和第三个选项在运行实际模拟时对服务器征税,因此可能会产生不切实际的缓慢结果。
此外,我不确定如何创建这些行,缺少使用循环或游标。如果SELECT top <n> random1(), random2(), […] FROM foo
实际上恰好有foo
条目,我可以使用<n>
,否则我(显然)只会获得与foo
恰好相同的行数。 GROUP BY newid()
或类似似乎没有做到这一点。
答案 0 :(得分:2)
对于测试CRM类型表的数据,我强烈推荐fakenamegenerator.com,您可以免费获得40,000个假名。
答案 1 :(得分:1)
您没有提及是否使用的是SQL Server 2008.如果使用2008并使用数据压缩,请注意随机数据的行为与实际数据的差别很大(较慢)。随机数据更难压缩。
Quest Toad for SQL Server和Microsoft Visual Studio Data Dude都有测试数据生成器,可以将伪造的“真实”数据放入记录中。
答案 2 :(得分:0)
如果你想要你可以依赖的结果,你需要让测试场景尽可能真实,这使得选项1成为你最好的选择。正如您所指出的,如果您得到的结果与其他选项不够好,您将不确定它是否由于不同的数据库行为。
如何生成数据将在很大程度上取决于问题域。您可以从多个客户处获取数据集并将它们合并到一个大型数据集中吗?如果数据是时间序列,则可以在不同范围内复制。
答案 3 :(得分:0)
数据通常类似于CRM,即联系人,项目等。简单地复制数据就好了(例如,如果我只有20,000行,我会复制它们五次以获得我想要的100,000行)。另一方面,合并只有在我们从未公开部署基准测试工具时才会起作用,这是出于明显的隐私原因(当然,除非我将一个函数应用于使原始数据难以理解而无法修复的每一列?类似于散列函数,只是没有过多地修改值的大小。)
要填充行,可能会这样:
WHILE (SELECT count(1) FROM benchmark) < 100000
INSERT INTO benchmark
SELECT TOP 100000 * FROM actualData