performance - MonetDb 在具有 20K 列的大表上的性能
问题描述
我正在测试 MonetDB 作为数据科学项目的解决方案。我有一个 21K 列的表 - 除了三个之外,所有列都是描述为浮点(32 位)和 650 万行(可能会或可能不会变大,可能高达 20M 行)的功能。
我的目标是在 MonetDB 上使用集成的 Python 来实现训练的能力,而无需每次都从数据库中导出数据。此外,对特定列的查询是必要的,因此列存储可能是一个显着的优势。我已经编译了 MonetDB 11.31.13 以获得嵌入式 Python 支持。操作系统是 CentOS 7。存储不是 SSD。48 核服务器,内存约 300GB。我在表上创建了一个(唯一)索引(没有分析)。
我注意到当我
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 在本地运行查询并使用 time 来测量花费的时间,我注意到两件事:
有一段时间单核占用 100% CPU。列越多,完成所需的时间就越长。只有当它完成时,我才能看到所有核心都在工作,正在消耗数据等......另外,在那段时间里,查询没有出现在
select * from sys.queue();
最终的结果中,从表中获取 50 行所需的时间几乎是 4小时。列的数量增加了一倍,但在测试的每一步之间,获得结果所需的时间增加了三倍。
所以我的问题是:这种行为是预期的还是反映了我做错了什么?
从表中请求的数据应该在 4MB 左右(50 * 21000 * 4Bytes),因此这反映了等待如此少量数据的大量时间。
帮助表示赞赏!
解决方案
推荐阅读
- python - sqlite:每次调用函数时调用数据库
- ruby-on-rails - 无法使用 Webpacker 转换特定的第三方 node_modules 脚本
- javascript - 如何更改 QuillJS (react-js) 中的默认标题名称?
- django - 未找到带有参数 '('',)' 的 *view* 的反向操作
- wordpress - 从子文件夹重定向 404
- c# - 将照片上传到 Instagram 会出错
- python - 如何检查 conda development 是否安装了我的项目/包?
- laravel - Laravel注销,点击后退按钮让我回到应用程序,我该如何防止这种情况
- ios - 未找到用于构建 Mac Catalyst 的 UIKit/UIKit.h
- node.js - 稍后在欧盟保存一张卡以向连接的条带帐户收费(使用 SCA)。反应和节点