Answers:
是的,如果您谨慎地进行研究,您可以编写一个有意义的基准案例,并了解如果该案例与特定案例相关,则可能与其他案例无关。当比较相同类型的数据库(关系数据库与另一个关系数据库)或不同类型的数据库时,也是如此。
不,您不能编写一个基准来神奇地证明特定数据库在每种情况下对于每个应用程序都比另一个数据库更好。
绝对可以说“从数据库移动到另一个数据库改善了我们的网站性能”。
您可以通过概要分析或运行时统计信息收集有关查询及其查询速度的足够信息,从而评估前一个数据库的性能。
您将应用程序移动到新的数据库。
您执行相同的措施。
你比较。
例如,如果在2.834 s内加载了3 182 432产品的完整列表。在旧数据库上加载,加载时间为0.920秒。在这两种情况下,在新数据库上,应用程序都具有一个空的缓存,这是双赢:新数据库改善了有关此查询的站点性能。
现在,作为任何性能指标,都存在偏差:
同意,新查询更快。但是,等等,您的DBA不知道如何使用您以前拥有的数据库,因此加载所有产品的查询并没有得到优化。如果这样重写,则可以在0.855 s内加载这些产品。而不是2.834。
好的,您会有更好的结果。但是,您是否不认为将一个数据库与刚刷新到10年的数据库中的新鲜数据进行比较是不公平的,该数据库的最新维护计划是在3年前运行的?顺便说一句,您是否不认为您在过去四年中至少应该更新一次数据库产品?
一些查询更快。有些比较慢。在迁移到新数据库时,如何计算平均结果以了解整体性能?好的,加载所有3 182 432产品的时间更快。但这有关系吗,尽管仅在极少数情况下在管理员执行某项特定任务的情况下才在网站上执行查询,但在过去十年中,该管理员仅执行过两次?另一方面,在主页上为新用户执行所有查询会浪费0.281 s。新数据库的时间为0.207秒。与旧的数据库。这个结果非常重要,尤其是因为这些查询无法长时间缓存,并且每天要执行数万次。
这两个数据库必须在相同的服务器,相同的硬件,相同的结构上进行测试。例如,您不能在单个硬盘上测试一个数据库,而在两个SSD的RAID1上测试另一个数据库。当您将大型项目迁移到新数据库时,以前的数据库仍将保留在以前的计算机上,则有可能将新数据库仅托管在其他数百个新部署的机架服务器上。
总而言之,您可以对应用程序的数据库查询进行基准测试,并获得精确的指标。但随后,您必须赋予数字含义。在这种状态下,人们很容易说,你获得了网站性能:否则,管理层会生气地得知,你已经花了数千美元,多月的努力只是为了让事情变得更慢。
最可怕的错误是从基准中得出这些结论,并得出一些愚蠢的结论,例如“ Microsoft SQL Server比Oracle快三倍”:这就像在说“ Java比PHP更好”。定义更好。在什么情况下更好?什么样的应用程序?对于什么开发人员团队?
您解释和概括的内容越多,事情变得无关紧要和毫无意义。
select [...]
您可以在文件的修订号832中找到的查询在第ProductFactory.cs
117行在0.5 s内执行。当在非功能性要求附件M中指定的条件下进行测试时,使用新数据库,情况3。这允许通过非功能性要求527(请参阅第80页,修订版9)。当测试结果在0.9..1.3 s范围内时,以前的数据库无法满足相同的要求。在相同条件下。
对于开发人员而言意义重大,并且足够精确,足以知道测试了什么,如何做以及得出了什么结果。这回答了您的问题2。
可悲的是,这对管理层没有任何意义。代替:
将我们的产品从MySQL迁移到最新版本的Microsoft SQL Server,使我们产品的整体性能提高了5倍,同时成本降低了2倍,环境足迹降低了3倍。我们相信,明年将所有应用程序迁移到Microsoft SQL Server将带来更好的结果,并提高我们的市场竞争力。
是纯粹的市场营销专家,从技术上讲,它没有任何意义,但令人惊讶的是,它对管理和市场营销部门具有价值。
最后,我们可以比较不同类型的数据库吗?我会说这完全有可能。假设我有一个托管大型照片的网站。这些照片存储在varbinary(max)
Microsoft SQL Server 2005中(因此我不能使用filestream
)。我担心加载这些照片时的性能,因此我决定将照片存储为文件,而是使用文件系统作为新数据库。首先,这些文件与数据库存储在同一台计算机上。我介绍了新的解决方案,并获得的结果表明,就我而言,从文件系统加载文件的速度比从Microsoft SQL Server加载文件的速度快4%。基准非常明确。现在,我可以考虑部署针对直接文件存储优化的专用服务器,而不是使用针对Microsoft SQL Server优化的服务器。
不,它们之间的差异使得任何一个基准都会有偏差。
就是说,开发像Computer Language Benchmarks Game这样的网站,该网站包含广泛的测试,并且可以轻松比较测试(特定测试语言到语言,或者多种语言的组合),这会有所帮助(在至少在我看来),特别是如果它是为了使社区能够提交解决方案并改善架构或查询中的任何缺点而设立的。
对于数据库基准站点,测试可以由原始数据组成,而不是实施算法(如在语言大战中),原始数据必须存储,然后根据特定的约束进行检索。例如,也许有一组原始数据,其中包含表示一个简单模式的信息,该模式表示社区图书馆可用来追踪顾客和书籍的内容。每个数据库必须存储所有100万条记录,然后检索满足约束的数据子集。然后,还可能存在一个表示一些非常简单的结构/关系的数据集(可能是通常用于ESPN等网站的注释系统),其中包含1亿条记录,并且必须执行自己的一组查询。等等。
在广泛的数据集(从复杂关系到简单关系,从小数据集到庞大的数据集)上测试数据库可能会非常有帮助,因为您至少能够看到具有与您的项目相似质量的数据的一般趋势。目前正在评估。