在维护类型的同时跨实例缓存 python 中的大型数据结构
Caching a large data structure in python across instances while maintaining types
我希望在 python 中使用分布式缓存。我有一个 fastApi 应用程序,希望每个实例都可以访问相同的数据,因为我们的负载均衡器可能会以不同方式路由传入请求。问题是我正在存储/编辑箭头羽毛文件中有关相对较大数据集的信息,并使用 Vaex 对其进行处理。 feather 文件自动加载正确的数据类型。我需要存储的数据结构将使用用户 ID 作为键,值将是一个大型数组数组。我已经将 memcache 和 redis 视为可能的缓存解决方案,但它们似乎都将条目存储为字符串/简单值。我希望避免解析字符串和对大量数据进行额外处理。是否有分布式缓存策略可以让我持久化类型?
我们想出的一个解决方案是将数据存储在一个目录中的多个羽毛文件中,该目录可供应用程序的所有实例访问,但这似乎很混乱,因为您需要在之后清理/删除文件每个会话。
Redis 'strings' 实际上可以存储任意二进制数据,不限于实际的字符串。来自 https://redis.io/topics/data-types:
Redis Strings are binary safe, this means that a Redis string can contain any kind of data, for instance a JPEG image or a serialized Ruby object.
A String value can be at max 512 Megabytes in length.
另一种选择是使用 Flatbuffers,这是一种序列化协议,专门设计用于允许 reading/writing 序列化对象 而无需 昂贵的反序列化。
尽管我建议重新考虑将大型复杂数据结构存储为缓存值。缺点是任何更改都将导致不得不重写缓存中的整个内容,这可能会变得昂贵,因此如果可能,请考虑将其分解为更小的 k/v 对。您可以使用 Redis 哈希数据类型来简化此操作。
我希望在 python 中使用分布式缓存。我有一个 fastApi 应用程序,希望每个实例都可以访问相同的数据,因为我们的负载均衡器可能会以不同方式路由传入请求。问题是我正在存储/编辑箭头羽毛文件中有关相对较大数据集的信息,并使用 Vaex 对其进行处理。 feather 文件自动加载正确的数据类型。我需要存储的数据结构将使用用户 ID 作为键,值将是一个大型数组数组。我已经将 memcache 和 redis 视为可能的缓存解决方案,但它们似乎都将条目存储为字符串/简单值。我希望避免解析字符串和对大量数据进行额外处理。是否有分布式缓存策略可以让我持久化类型?
我们想出的一个解决方案是将数据存储在一个目录中的多个羽毛文件中,该目录可供应用程序的所有实例访问,但这似乎很混乱,因为您需要在之后清理/删除文件每个会话。
Redis 'strings' 实际上可以存储任意二进制数据,不限于实际的字符串。来自 https://redis.io/topics/data-types:
Redis Strings are binary safe, this means that a Redis string can contain any kind of data, for instance a JPEG image or a serialized Ruby object. A String value can be at max 512 Megabytes in length.
另一种选择是使用 Flatbuffers,这是一种序列化协议,专门设计用于允许 reading/writing 序列化对象 而无需 昂贵的反序列化。
尽管我建议重新考虑将大型复杂数据结构存储为缓存值。缺点是任何更改都将导致不得不重写缓存中的整个内容,这可能会变得昂贵,因此如果可能,请考虑将其分解为更小的 k/v 对。您可以使用 Redis 哈希数据类型来简化此操作。