database - Google App Engine 中的推荐模型基础架构
问题描述
我在 GAE 中构建了一个简单的推荐模型,其核心是最大化用户偏好w
和其他非选定项目之间的相似性。具体来说,如果Sigma
是项目的相似性矩阵:
return argmax_j(sum_i(w_i x Sigma_i_j))
,这样w_j = 0
该应用程序应在最多 1-2 秒内通过网站提供新建议。
我的问题与如何组织代码和数据有关,以尽量减少响应时间和内存占用。我目前的设置如下:
Sigma
在 Cloud Storage 中作为腌制的 numpy 数组。它是 200-300 Mo,需要 5s 来检索。这显然太慢了。此外,每个新生成的进程都有该文件的副本,并且我的 F4 实例在 3-4 个进程后超出了内存。w
也在云存储中作为腌制的 numpy 数组。它们可能会被移动到数据存储区,但它们需要 < 0.1 秒的时间来检索,所以现在不是什么大问题。
我正在考虑一些解决速度和内存问题的选项:
- 在 Redis 内存存储中缓存泡菜。这会提高速度,但我相信每个进程仍然会有一个 200Mo 的文件副本,因此如果产生 > 3-4 个进程,实例将会崩溃。
- 在 Compute Engine 中存储和运行矩阵运算,并从 GAE 应用程序中查询。我真的很欣赏 GAE 的 PaaS 价值,我有点不愿意打开 Compute Engine 的潘多拉魔盒。
此类问题的最佳实践是什么?
谢谢
解决方案
推荐阅读
- log4j2 - Log4j2.xml 如何停止将日志打印到控制台并仍然将它们写入文件?
- r - 在 png 绘图设备中设置字体系列和颜色
- google-apps-script - 将 XLSX 文件从每月电子邮件(在 Gmail 中)导入指定的 Google 表格
- vue.js - 如何在 vue.js 框架的另一个 js 文件中访问 main.js 中的常量?
- java - Spring data Mongo DB:findByName 的奇怪行为
- sql - 我在 SQL 中使用循环时做错了什么
- sql-server - SQL 查询月按系统
- matlab - MATLAB bar() 错误:“带有自定义变量名称的无法识别的选项“var”
- python - 在同一 DataFrame 上将每列加倍的最佳实践
- python - 为什么 MongoEngine/pymongo 在尝试仅第一次访问对象时会出错