【问题标题】:How should I store data in a recommendation engine?我应该如何在推荐引擎中存储数据?
【发布时间】:2017-02-27 06:23:13
【问题描述】:

我正在开发一个推荐引擎。我认为我无法将整个相似度矩阵保存在内存中。 我计算了 10,000 个项目的相似性,它是超过 4000 万个浮点数。我将它们存储在一个二进制文件中,它变成了 160 MB。

哇! 问题是我可以拥有近 200,000 件物品。 即使我将它们分成几个组并为每个组创建相似度矩阵,我仍然必须在某个时候将它们加载到内存中。 但是会消耗很多内存。

那么,有没有办法处理这些数据?

我应该如何存储它们并加载到内存中,同时确保我的引擎对输入的响应速度相当快?

【问题讨论】:

    标签: recommendation-engine bigdata


    【解决方案1】:

    您可以使用memory mapping 访问您的数据。这样,您可以将磁盘上的数据视为一个大内存区域(并像访问内存一样访问它),不同之处在于只有您读取或写入数据的页面(临时)加载到内存中。

    如果您可以对数据进行某种程度的分组,那么在访问数据时只需在内存中读取较小的部分。

    至于浮点数,如果您可以降低分辨率并将值存储在 16 位整数中,那么大小也将减半。

    【讨论】:

    • 我正在使用 node.js,node.js 中是否提供内存映射?
    • @alim 我不知道 node.js,但似乎有可能:stackoverflow.com/a/23748621/5708620 - 但正如该答案中所述,从某些 C++ 访问这么多数据可能会更好(或其他)代码而不是脚本(并且可能将某些部分保留在所有线程的内存中 - 为每个请求打开和关闭内存映射不会有太大帮助)。
    猜你喜欢
    • 2017-10-26
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 2017-11-26
    • 1970-01-01
    相关资源
    最近更新 更多