0

我们在 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 上的服务器上 - 因此请求非常快。

4

1 回答 1

1

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

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

于 2013-06-08T05:38:08.373 回答