具有20K列的大型表上的MonetDb性能

时间:2019-05-02 11:33:56

标签: performance monetdb

我正在测试MonetDB作为数据科学项目的解决方案。我有一张21K列的表格-除了三列以外,所有功能都被描述为float(32位)和6.5M行(可能会变大也可能不会变大,也许多达2000万行)。

我的目标是使用MonetDB上的集成Python来进行训练,而不必每次都从DB导出数据。另外,对特定列的查询是必需的,因此列存储可以是一个显着的优势。 我已经编译了MonetDB 11.31.13以获得嵌入式Python支持。操作系统是CentOS7。存储不是SSD。具有约300GB内存的48核服务器。我在表上创建了一个(唯一的)索引(不进行分析)。

我注意到,当我

SELECT * FROM [TABLE_NAME] SAMPLE 50; 需要很长时间才能完成。 然后,我尝试了:

SELECT f1, f2, ..., f501 from [TABLE_NAME] SAMPLE 50;

SELECT f1, f2, ..., f1001 from [TABLE_NAME] SAMPLE 50;

SELECT f1, f2, ..., f2001 from [TABLE_NAME] SAMPLE 50;

...

SELECT * from [TABLE_NAME] SAMPLE 50;

我使用mclient在本地运行查询,并用时间来衡量所花费的时间,我注意到了两件事:

  1. 在一段时间内,单个内核占用100%的CPU。列越多,完成时间就越长。只有完成后,我才能看到所有内核都在工作,正在消耗数据等。此外,在此期间,查询不会出现在 select * from sys.queue(); 最终,从表中获取50行所需的时间将近4个小时。

  2. 列数增加了一倍,但在测试的每个步骤之间,获得结果所需的时间却增加了三倍。

所以我的问题是: 这种行为是预期的还是反映出我做错了什么?

从表中请求的数据应为4MB(50 * 21000 * 4字节)左右,因此这反映了等待如此少量数据的大量时间。

感谢您的帮助!

0 个答案:

没有答案