我正在写一个与海量数据获取相关的项目。 目前我使用.NET Framework 4.8和Mysql包来启动连接并向数据库服务器插入数据。
我将插入大约 400, 000 行/秒。 我担心 SQL 连接可能成为我的程序的瓶颈。 我想知道如果我使用 sql 创建多线程连接并使用消费者队列插入数据,它会更快并且值得吗(优点和缺点)?
在我的直觉中,它会更快,但我不确定它可以在线程开销方面提供多少性能。我不是 SQL 专家,因此如果有人能够解释在多个线程上打开与 SQL 的多个连接的优缺点,那就太好了。
谣言、观点、道听途说、事实、版本相关的基准、一些个人经验等......
多线程可以提高吞吐量,但也有限制:
批处理:
LOAD DATA
是一次从单个线程INSERT
大量行的最快方法。但是,如果您包括将文件写入LOAD
的成本,则可能会使其比批量插入慢。INSERT
紧随其后。但当达到某个限制或“收益递减”时,它的上限为“数百”行。INSERT
查询插入一行的速度的 10 倍。因此,它(或LOAD DATA
)值得用于高速摄取。 (来源:许多不同的定时测试。)数据来源:
加载数据后会发生什么?当然,这不是一个只写不读的表。
PARTITIONing
很少有用,除了最终清除旧数据之外。请参阅分区