【问题标题】:Caching a large data structure in python across instances while maintaining types在 python 中跨实例缓存大型数据结构,同时维护类型
【发布时间】:2021-11-08 21:16:13
【问题描述】:

我希望在 python 中使用分布式缓存。我有一个 fastApi 应用程序,并希望每个实例都可以访问相同的数据,因为我们的负载均衡器可能会以不同的方式路由传入的请求。问题是我正在存储/编辑有关箭头羽毛文件中相对较大的数据集的信息,并使用 Vaex 处理它。羽化文件会自动加载正确的数据类型。我需要存储的数据结构将使用用户 ID 作为键,值将是一个大数组数组。我已经将 memcache 和 redis 视为可能的缓存解决方案,但两者似乎都将条目存储为字符串/简单值。我希望避免对大量数据进行解析字符串和额外处理。是否有一种分布式缓存策略可以让我持久化类型?

我们提出的一个解决方案是将数据存储在多个羽毛文件中的目录中,该目录可供应用程序的所有实例访问,但这似乎很混乱,因为您需要在每次会话后清理/删除文件.

【问题讨论】:

    标签: python redis memcached feather


    【解决方案1】:

    Redis 'strings' 实际上能够存储任意二进制数据,它不限于实际的字符串。来自https://redis.io/topics/data-types

    Redis 字符串是二进制安全的,这意味着 Redis 字符串可以包含任何类型的数据,例如 JPEG 图像或序列化的 Ruby 对象。 字符串值的最大长度为 512 兆字节。

    另一种选择是使用 Flatbuffers,它是一种序列化协议,专门设计用于允许读取/写入序列化对象无需昂贵的反序列化。

    虽然我建议重新考虑将大型复杂数据结构存储为缓存值。缺点是任何更改都将导致必须在缓存中重写整个内容,这可能会变得昂贵,因此如果可能,请考虑将其分解为更小的 k/v 对。您可以使用 Redis Hash 数据类型来简化实现。

    【讨论】:

    • 这给了我一些不错的选择。我从未听说过或 FlatBuffer。我将不得不更多地探索 Redis。我在 Node 情况下使用过它,但它看起来像我发现的所有示例都将所有内容序列化为字符串我希望存储一个 int 数组数组的原因是,我不必遍历具有 10 秒或可能 100 秒的数据集数百万行多次重建我用于消化的数据。我需要做一些分析哪些需要更长的时间,以这种方式重建数据或频繁写入复杂的数据结构。
    猜你喜欢
    • 1970-01-01
    • 2018-06-20
    • 2013-10-31
    • 2021-02-19
    • 1970-01-01
    • 2015-10-17
    • 1970-01-01
    • 2018-12-02
    • 2011-01-07
    相关资源
    最近更新 更多