【问题标题】:Design Idea for an inventory analytics tool design库存分析工具设计的设计理念
【发布时间】:2020-04-06 21:44:33
【问题描述】:

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

我的桌子有SKU, STORE, DATE_BY_DAY, SOLD_PRICE, ORDER_VOLUME, INVENTORY_LEVEL. 我使用的是 parquet 格式,按 store 分区(如果按 sku 分区,分区会变得太小)。

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

Dask 不支持多索引并且排序非常昂贵,因此执行上述计算变得太难和太慢。

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

  1. 完全迁移到 Spark。 (我目前正在使用 dask)
  2. 转为面向行的格式。 (我目前正在使用 Parquet)
  3. 以某种方式更改表架构,例如为SOLD_PRICE 创建一个表,为ORDER_VOLUME 创建另一个表,两者均由SKU, STORE 索引,日期以列为轴。
  4. 创建 SKU 和 Store 的串联以减少索引层次结构。

哪些选项可以为我的项目带来性能提升?你能推荐点别的吗?

【问题讨论】:

    标签: apache-spark database-design analytics dask parquet


    【解决方案1】:

    这里会有一些大数据(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 处理数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-27
      相关资源
      最近更新 更多