【发布时间】:2020-02-21 03:36:19
【问题描述】:
我有一个带有熊猫数据框的 python 项目,我需要一个数据库来扫描每个客户端的大行计数
现在在 MySql 中,数据库的查询需要很长时间才能执行,我需要新数据库系统的更好性能,但我现在不知道选择的最佳选择是什么:RedShift 或 DynamoDb,因为我需要速度来执行大型查询从两个表中插入/删除/选择,我解释现在系统操作描述如下:
表:sales,sales_simulate,这个表不需要和其他表有关系,只有列client_id在开始处理时从数据文件源获取id,这个文件每个月导入来模拟数据
前提:该系统仅适用于 1 个在 vps 中运行的管理员,仅 1 个大型客户查询和销售每月模拟和更改值,我需要重新计算 3 年前的数据,仅此系统每月运行 1 次
问题:
获取 30k clients_id 查询 = ~8s
要获得每个客户的销售额 = ~4s
使用 python 处理(计算销售额等)take = 2m
删除/插入查询每 1k 个已处理的客户端 1kk 行占用 = ~12m
1k 客户 = ~14m
~14m * 30k 客户 = 420m / 60 = 7 小时
示例数据:
我有 30k 客户
我需要从 3 年前到现在的当前日期为每个客户获取销售额
1 个客户有 4~10k 行销售登记,我有 30k 个客户:30k * 4k = 120k max 300k *
示例:
client_id | date | amount
1 2019-02-01 12:33:44 100.0
1 2019-02-01 12:34:44 100.0
1 2019-02-01 20:54:44 100.0
2 2019-02-01 08:54:44 62.0
2 2019-02-01 23:54:44 60.0
我得到日期结果的总量:
client_id | date | amount
1 2019-02-01 300.0
2 2019-02-01 122.0
现在使用 pandas 填充每个客户从日期前 3 年到现在日期的数据框:
client_id | date | amount
1 2070-02-20 0
....
1 2019-02-01 300.0
...
1 2020-02-20 0
然后,当用所有客户的所有日期填充数据框时,我发送到数据库中保存每个客户的 1.125k 行:1.125k * 30k(客户)= 33,750,000 行
现在我尝试在数据部分保存,每 1000k 已处理的客户端,我将行保存在表中,1.125k * 1k = 1,125,000 行
【问题讨论】:
-
软件推荐请求在这里显然是无关紧要的——当我们允许它们时,商业软件供应商通过 sockpuppet 帐户提出虚假问题,以在回答中骗取他们的产品(而且,软件比较问题也被排除在外) -随着项目的变化、退休等快速约会——这使得它们对于努力成为常见问题解答的东西来说不是很好)。请参阅stackoverflow.com/help/on-topic“一些问题仍然不在主题”列表中的#4
-
我不认为你想卖东西。我只是在解释为什么规则是这样的。
-
对于允许此问题 的备用 Stack Exchange 站点,请参阅 Software Recommendations - 但在该站点上,与所有其他站点一样,请在发布前阅读规则。
标签: python pandas amazon-dynamodb amazon-redshift data-science