我应该如何在推荐引擎中存储数据?
How should I store data in a recommendation engine?
我正在开发一个推荐引擎。我想我无法将整个相似度矩阵保存在内存中。
我计算了 10,000 个项目的相似度,它超过了 4000 万个浮点数。我将它们存储在一个二进制文件中,它变成了 160 MB。
哇!
问题是我可能有将近 200,000 件物品。
即使我将它们分成几组并为每个组创建相似度矩阵,我仍然必须在某个时候将它们加载到内存中。
但是会消耗很多内存。
那么,有没有办法处理这些数据呢?
我应该如何存储它们并加载到内存中,同时确保我的引擎对输入的响应速度相当快?
您可以使用 memory mapping 访问您的数据。通过这种方式,您可以将磁盘上的数据视为一个大内存区域(并像访问内存一样访问它),不同之处在于只有您读取或写入数据的页面(临时)加载到内存中。
如果您可以对数据进行某种程度的分组,那么在访问数据时只需在内存中读取较小的部分。
至于浮点数,如果您可以使用较低的分辨率并将值存储在 16 位整数中,那么大小也会减半。
我正在开发一个推荐引擎。我想我无法将整个相似度矩阵保存在内存中。 我计算了 10,000 个项目的相似度,它超过了 4000 万个浮点数。我将它们存储在一个二进制文件中,它变成了 160 MB。
哇! 问题是我可能有将近 200,000 件物品。 即使我将它们分成几组并为每个组创建相似度矩阵,我仍然必须在某个时候将它们加载到内存中。 但是会消耗很多内存。
那么,有没有办法处理这些数据呢?
我应该如何存储它们并加载到内存中,同时确保我的引擎对输入的响应速度相当快?
您可以使用 memory mapping 访问您的数据。通过这种方式,您可以将磁盘上的数据视为一个大内存区域(并像访问内存一样访问它),不同之处在于只有您读取或写入数据的页面(临时)加载到内存中。
如果您可以对数据进行某种程度的分组,那么在访问数据时只需在内存中读取较小的部分。
至于浮点数,如果您可以使用较低的分辨率并将值存储在 16 位整数中,那么大小也会减半。