gpt4 book ai didi

c# - 数据库插入性能

转载 作者:IT老高 更新时间:2023-10-29 00:16:55 25 4
gpt4 key购买 nike

我们计划实现一个系统,用于将高频市场报价记录到数据库中以供进一步分析。为了简单地了解一下我们可以在不同的数据库解决方案上获得什么样的存储性能,我创建了一个小应用程序来插入一行基本的报价信息。在几个不同的数据库上运行相同的代码时,我们得到了一些有趣的结果。

插入的数据非常简单,如下所示:

CREATE TABLE [dbo].[price](
[product_code] [char](15) NULL,
[market_code] [char](10) NULL,
[currency] [nchar](6) NULL,
[timestamp] [datetime] NULL,
[value] [float] NULL,
[price_type] [char](4) NULL
) ON [PRIMARY]

微软 SQL 服务器:

总测试时间:32 秒。每秒 3,099 个价格。

MySQL 服务器:

总测试时间:18 秒。每秒 5,349 个价格。

MongoDB 服务器:

总测试时间:3 秒。每秒 25,555 个价格。

此测试的目的只是简单地了解底层系统可预期的“原始性能”类型。在实际实现解决方案时,我们当然会进行缓冲、批量插入等操作。

我们只关心插入的速度,因为查询是稍后“离线”完成的。

有没有人对其他适合的数据库有任何建议?今晚晚些时候我也会尝试使用 HDF5 和 MonetDB。它需要具有多客户端访问权限。

感谢您的任何建议!

更新:

抱歉,但我在提出问题之前对我的问题进行了重大编辑,看来我遗漏了服务器版本和硬件的一些细节。所有测试均在运行 Windows 2008 x64 的 12GB RAM 的 8 核服务器上进行。

Microsoft SQL Server 2008 企业版 x64。MySQL 5.1.44 作为 InnoDB 表运行。MongoDB 1.2.4 x64

当前测试是一个简单的循环,将行插入到数据库中,其中包含来自纳斯达克的真实历史数据,这些数据已编译在已导入到内存中的 CSV 文件中。代码在 C# NET4 x64 中。

MS SQL 和 MySQL 服务器被“调整”到完美的设置,而 MongoDB 只是使用默认设置。 SQL 表的设置没有索引,因为 DB 的目的很简单,只是作为转移到主分析系统之前的一个集结地。

许多人建议批量插入,但这是一种困难的方法,因为我们有几个客户将单个报价独立于实时流推送到数据库中。为了允许这样的方法,我们必须扩展数据库前面的层,超出我们现在有机会测试的范围。然而,我认为最终架构必须做一些事情,因为我们从除 MongoDB 之外的所有东西获得的数字不足以处理所需的输入数量。

更新 2:SSD 驱动器确实非常适合这一点,我们自己也在使用它。然而,最终产品将安装在几个不同的客户,他们都提供自己的熨斗..从 IT 部门获得带有 SSD 的服务器仍然很难......:(

更新 3:

我尝试了建议的 BulkCopy 方法。与其他循环相同的循环的性能,但首先进入 DataTable,然后 BulkInsert 进入 SQL Server 导致以下结果:

Microsoft SQL Server(批量):

总测试时间:2 秒。每秒 39401 个价格。

最佳答案

我只能对sql-server真正发表评论,但有一些事情可以尝试:

  • 命令批处理(即对数据库执行多个INSERT)
  • 批量插入(通过 SqlBulkCopy)

两者都应该对单行插入进行显着改进(后者最快)

关于c# - 数据库插入性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2394005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com