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