我最近开始使用InfinDB,到目前为止它运行良好。我使用cipimport工具进行批量加载,并在几秒钟内插入数百万行。但是,在某些情况下我需要插入几千行,并且由于数据生成方式的性质,使用insert语句在程序上更合理。但是,当我尝试这样做时,插入速度似乎很慢。它每秒插入大约30行(每行非常小......每行大约5列,每个类型为varchar(10))。我是否错误地配置和/或安装了某些内容,或者使用insert语句是否达到了预期的速度?我的计算机有16 GB RAM,SSD速度为520 mb / s,使用MyISAM或Innodb我可以使用insert语句每秒插入数千行。
答案 0 :(得分:2)
INSERT INTO VALUES(),(),...
比分别INSERT
查询快得多。
答案 1 :(得分:2)
我是InfiniDB的架构师
你在做INSERT INTO还是在做一堆单独的INSERT命令?你说你做了几千行,所以你能用INSERT INTO做到吗?
cpimport已针对快速加载进行了优化,以及为什么我们建议将其用于INSERT INTO和LOAD DATA。由于数据库的性质和下面的体系结构,有几个原因可以解释为什么会这样。话虽如此,我们意识到人们希望能够使用INSERT INTO和LOAD DATA,因为他们习惯使用它们并希望获得更快的性能,类似于他们使用cpimport获得的性能。这项工作目前正在进行中,并将在InfiniDB的4.6版本中发布,该版本将于6月底/ 7月初发布。这些操作将进行优化,以便在没有未完成的提交时以高速模式运行。
答案 2 :(得分:0)
您不使用面向列的数据库进行OLTP操作。它们专为批量插入而设计。您可以在cpimport作业中自动化插入。
答案 3 :(得分:0)
InfiniDB是一个面向列的数据库,其中MyISAM和Innodb是面向行的。 基本上这意味着数据保存在分别按列和行分组的硬盘上。 因此,如果要在面向列的数据库中插入新行,则必须为每个列插入值,每个列位于硬盘上的不同位置。 但是,从1列获取所有数据(例如,调用AVG())比使用面向行的dbms快得多。
我建议阅读有关面向列的数据库的维基百科文章,以获得这个想法:http://en.wikipedia.org/wiki/Column-oriented_DBMS