我正在做一个项目,我们定期通过 IMAP 或 POP 收集大量电子邮件,对其进行分析(例如聚类到对话中,提取重要句子等),然后通过网络将视图呈现到最后用户。
主视图将是一个类似于 facebook 的个人资料页面,用于每个联系人的最近(20 个左右)对话,这些对话来自我们捕获的电子邮件。
对我们来说,能够频繁快速地检索个人资料页面和最近的 20 项非常重要。我们也可能经常在此提要中插入最近的电子邮件。为此,文档存储和 MongoDB 的低成本原子写入似乎很有吸引力。
但是,我们也会有大量不经常访问的旧电子邮件对话(因为它们不会出现在最近的 20 个项目中,人们只有在搜索它们时才会看到它们,这将是比较少见)。此外,随着时间的推移,此数据的大小将比联系人存储增长得更快。
根据我的阅读,MongoDB 似乎或多或少要求整个数据集保留在 RAM 中,解决此问题的唯一方法是使用虚拟内存,这可能会带来很大的开销。特别是如果 Mongo 无法区分易失性数据(配置文件/提要)和非易失性数据(旧电子邮件),这最终可能会非常令人讨厌(并且因为它似乎将虚拟内存分配转移给了操作系统,我不明白 Mongo 怎么可能做到这一点)。
似乎唯一的选择是(a)购买足够的 RAM 来存储所有内容,这对于易失性数据来说很好,但对于捕获 TB 的电子邮件来说几乎没有成本效益,或者(b)使用虚拟内存并查看读取/写入我们的易失性数据缓慢到爬行。
这是正确的,还是我错过了什么?MongoDB 是否适合解决这个特殊问题?如果是这样,配置会是什么样子?