【问题标题】:How to structure large memcache datasets如何构建大型 Memcache 数据集
【发布时间】:2013-06-08 05:24:05
【问题描述】:

我们在 Ubuntu 13.04 上使用带有 Python 2.7 的 Django 1.4 - 尽管这个问题可能与这些信息无关。

我有一个要求,我们为我们的网站打了一个非常慢的 API。因此,我们的页面往往会在 3-6 秒之间加载。我们的数据显示,我们在 5 秒后的留存率接近 0%。因此,我正在为我们从 3rd 方 API 提取的数据实施一个 memcache 解决方案——众所周知,它每 4 小时更新一次。

我的问题涉及处理 memcache 数据集的“最佳实践”。我们通常会为任何给定的请求提取完整数据集的一部分。整个数据集大约需要 20 分钟才能拉下来 - 非常大。

如果可以的话,我不想增加最大内存缓存单元大小 (64 MB)。为此,将数据分割成逻辑单元似乎是合理的。为了给这个问题提供动力,我应该提到最终我将对数据进行 JSON 化。举个例子:

{Layer1:
    Layer2: {
        Layer3: {
            Layer4: {
                'data1': some_data,
                'data2': some_more_data,
                'data3': even_more_data,
            }
        }
    }
}

每一层都有多个数据段(我相信数据嵌入在 4 到 6 层之间)。

我认为存储在Layer1 级别是个好主意,该级别应始终低于 64 MB 限制。另一种选择是存储在单个数据级别,并将密钥存储为Layer1-Layer2-Layer3-Layer4...虽然不是很优雅,但已被证明可以在我们的系统中工作。

此问题的目的主要是根据您在缓存信息方面的经验提出意见。最终,我们的需求需要一次包含Layer1 级别数据中的信息。

如果有充分的理由放弃 Layer1 级别的缓存,请告诉我。

提前感谢您的意见。

编辑1:

根据 Brent Washburne 的回复,我认为可能有必要进行详细说明。我处理一个大型系统的后端,该系统管理着 1000 个前端网页(登录页面)。每个网页都将从该数据集中请求详细信息。用户将输入搜索参数,前端必须查询数据集以获取信息以动态填充结果。

幸运的是,我们的登录页面与我们的后端服务器位于同一 Intranet 上的服务器上 - 所以请求非常快。

【问题讨论】:

    标签: python memcached


    【解决方案1】:

    问题是“我应该存储几大块数据还是许多小块数据?”在不了解您的分层方案的情况下,我会说大块。每个 memcache 请求都是一个网络请求,您可以通过最小化请求来最小化流量。

    另一种选择是将网页缓存在您的服务器上。提取数据后(您说每四个小时一次),从数据中编写 HTML 页面并将它们存储在您的 Web 文件夹中。然后您的静态页面将立即提供服务,您将不需要 memcache 服务器。

    【讨论】:

    • 感谢您的意见。在开始切小块之前,您会推荐多大?我目前处于 Layer1 数据接近 30MB 的地步(并且有 100 个 Layer1 实例)。提供更多细节 - 此实现纯粹是后端。前端在其他地方处理,因此不适用为该数据创建 HTML 页面。
    • 仍然很难说合适的尺寸是多少。您的网络速度以及 memcache(CPU + 内存)速度是一个重要因素。设置一个 memcache 测试,以不同的块大小并行执行多个查询。在某个时候,吞吐量会随着一个瓶颈变得饱和而下降。然后将查询结果打包成最佳的块大小。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多