库存分析工具设计理念



我正在设计一个使用Python、panda和Out-of-core工具进行库存交易分析的工具。这里会有一些大数据(2gb到200gb(,所以我使用Dask。

我的桌子有SKU, STORE, DATE_BY_DAY, SOLD_PRICE, ORDER_VOLUME, INVENTORY_LEVEL.我使用的是镶木地板格式,按商店分区(如果我按sku分区,分区会变得太小(。

我想要具有非常低延迟的快速查询(主要是一些SKU和存储的聚合和过滤器(。问题是我必须马上做除此之外,我还必须根据当前库存(在另一张表上(计算每天的库存水平(INVENTORY_LEVEL(,并按日期重新索引,因为源文件中可能缺少一些天数。

Dask不支持多索引,而且排序非常昂贵,所以做上面提到的计算会变得太难和太慢。

到目前为止我的选择和想法:

  1. 完全移动到Spark。(我目前正在使用dask(
  2. 移动到面向行的格式。(我目前正在使用Parquet(
  3. 以某种方式更改表模式,就像为SOLD_PRICE创建一个表,为ORDER_VOLUME创建另一个表一样,这两个表都由SKU, STORE索引,日期以列为中心
  4. 创建SKU和Store的串联,以减少索引层次结构

这些选项中的哪一个可以为我的项目带来性能增强?你能提出其他建议吗?

这里会有一些大数据(2gb到200gb(

200 GB不是大数据,但我会说"2到200"是2个数量级,不是一个很大的估计。

你能提出其他建议吗?

是:SQL。我还没有看到Pandas胜过SQLite,更不用说一个成熟的SQL DBMS了,数据集越大,SQL就做得越好。SQL还将为您提供更具表达力、更全面的语法,并减轻Pandas的一些乏味。

SQL是为"动态"查询而发明的。

我建议将您的数据加载到SQLite中。据猜测,你似乎只有一两张桌子。然后尝试一些查询,看看你是怎么做的。不要忽略你最喜欢的搜索和加入条件的索引。我想你可能会惊喜地发现,它计算inventory level的速度如此之快,而你的努力却如此之少。

这并不是说你必须放弃Python。SQLite有两个Python库,其中一个用于大多数SQL引擎。您保留Python来处理UI工作,并让SQL处理数据。

最新更新