【问题标题】:Caching a large dataframe in database在数据库中缓存大型数据框
【发布时间】:2020-11-13 00:09:05
【问题描述】:

我试图使用 django.core.cache.backends.db.DatabaseCache 后端缓存一个大熊猫数据帧到 MySQL 数据库中。它适用于 300,000 个项目,但不适用于更大的项目(例如 400,000 个项目)。我可以增加缓存值的最大长度吗?提前致谢。

import pandas as pd
import numpy as np
from django.core.cache import cache, caches

cache.set('data', pd.DataFrame(np.random.rand(300,1000))) # It works
cache.set('data', pd.DataFrame(np.random.rand(400,1000))) # It doesn't; no error, just no change in database
df = cache.get('data')
# It returns a dataframe with 300 rows × 1000 columns
# But I expect 400 rows x 1000 columns

【问题讨论】:

  • 会产生什么错误?
  • 没有错误,但它返回了较小的旧数据帧。
  • MySQL默认的max_allowed_pa​​cket是4MB,不知道是不是这个原因
  • 如果有一个(原因)它的历史(甚至可能歇斯底里)。设置大应该不会产生不良影响。

标签: mysql django pandas caching


【解决方案1】:

原来是因为 MySQL 5.7 的 max_allowed_pa​​cket 的默认值为 4194304。

SET GLOBAL max_allowed_packet=1073741824;

已经解决了这个问题。感谢 danblack 的建议。

【讨论】:

    猜你喜欢
    • 2012-06-10
    • 1970-01-01
    • 2011-02-17
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-07
    相关资源
    最近更新 更多