如何在设计糟糕的数据库上实时搜索值?

问题描述

我有一个名为 Company 的集合,其结构如下:

{
    "_id" : ObjectId("57336ea1a7454c0100d889e4"),"currentMonth" : 62,"variables1": { ... },...
    "variables61": { ... },"variables62" : {
        "name" : "Test","email": "email@test.com",...
    },"country" : "US",}

我的需求是能够按名称搜索具有最新数据的公司。我无权更改此数据结构,因为许多应用程序仍在使用它。目前我还没有找到用这种数据结构索引这些变量的方法,这使得搜索速度变慢。

今天,这些文档中的每一个都有几兆字节的大小,而这个集合中有超过 20,000 个。

我想要实现的系统使用搜索引擎来索引公司名称,但为此它需要能够检测集合中的变化。

MongoDB 的 change stream 似乎是一个可行的选择,但我不确定如何使其具有可扩展性和效率。

您有什么建议可以帮助我解决这个问题吗?关于设置上述系统所需的步骤有什么建议吗?

解决方法

通常使用 MongoDB,您可以向文档添加新字段,现有应用程序将简单地忽略额外的字段(尽管它们自然不会由旧代码填充)。因此:

  1. 创建一个定期执行的任务,该任务遍历您集合中的所有文档,从其字段中找出每个文档的名称,然后将名称写入顶级字段。
  2. 在该字段上添加索引。
  3. 在您的搜索代码中,通过该字段的值进行查找。
  4. 将计算出的名称与真实来源名称进行比较。如果不同,则丢弃该文档。

如果名称一旦设置就不会改变,则第 1 步只需要遍历缺少顶级名称的文档,不需要第 4 步。

,

使用 monstache 的更改检测模式,我能够实时同步 MongoDB 与 ElasticSearch,根据当前月份执行 Filter,然后 Map 要索引的变量的结果?