如何在设计糟糕的数据库上实时搜索值?
How to search values in real time on a badly designed database?
我有一个名为 Company
的集合,它具有以下结构:
{
"_id" : ObjectId("57336ea1a7454c0100d889e4"),
"currentMonth" : 62,
"variables1": { ... },
...
"variables61": { ... },
"variables62" : {
"name" : "Test",
"email": "email@test.com",
...
},
"country" : "US",
}
我的需要是能够使用最新数据按名称搜索公司。我无权更改此数据结构,因为许多应用程序仍在使用它。目前我还没有找到用这个数据结构来索引这些变量的方法,这使得搜索很慢。
今天,这些文档中的每一个都可能有几兆字节,并且在这个集合中有超过 20,000 个。
我要实现的系统使用搜索引擎来索引公司名称,但为此它需要能够检测集合中的变化。
MongoDB 的 change stream 似乎是一个可行的选择,但我不确定如何使其可扩展和高效。
你有什么建议可以帮助我解决这个问题吗?对设置上述系统所需的步骤有什么建议吗?
通常使用 MongoDB 您可以向文档添加新字段,现有应用程序将简单地忽略额外的字段(尽管它们自然不会被旧代码填充)。因此:
- 创建一个定期执行的任务,遍历您集合中的所有文档,从其字段中找出每个文档的名称,然后将名称写入顶级字段。
- 在该字段上添加索引。
- 在您的搜索代码中,按该字段的值查找。
- 将计算出的名称与真实名称进行比较。如果不同,则丢弃文档。
如果名称一旦设置就不会改变,则第 1 步只需要遍历缺少顶级名称的文档,不需要第 4 步。
使用 monstache 的变更检测模式,我能够与 ElasticSearch 实时同步 MongoDB,根据当前月份执行 Filter
,然后 Map
结果要索引的变量数
我有一个名为 Company
的集合,它具有以下结构:
{
"_id" : ObjectId("57336ea1a7454c0100d889e4"),
"currentMonth" : 62,
"variables1": { ... },
...
"variables61": { ... },
"variables62" : {
"name" : "Test",
"email": "email@test.com",
...
},
"country" : "US",
}
我的需要是能够使用最新数据按名称搜索公司。我无权更改此数据结构,因为许多应用程序仍在使用它。目前我还没有找到用这个数据结构来索引这些变量的方法,这使得搜索很慢。
今天,这些文档中的每一个都可能有几兆字节,并且在这个集合中有超过 20,000 个。
我要实现的系统使用搜索引擎来索引公司名称,但为此它需要能够检测集合中的变化。
MongoDB 的 change stream 似乎是一个可行的选择,但我不确定如何使其可扩展和高效。
你有什么建议可以帮助我解决这个问题吗?对设置上述系统所需的步骤有什么建议吗?
通常使用 MongoDB 您可以向文档添加新字段,现有应用程序将简单地忽略额外的字段(尽管它们自然不会被旧代码填充)。因此:
- 创建一个定期执行的任务,遍历您集合中的所有文档,从其字段中找出每个文档的名称,然后将名称写入顶级字段。
- 在该字段上添加索引。
- 在您的搜索代码中,按该字段的值查找。
- 将计算出的名称与真实名称进行比较。如果不同,则丢弃文档。
如果名称一旦设置就不会改变,则第 1 步只需要遍历缺少顶级名称的文档,不需要第 4 步。
使用 monstache 的变更检测模式,我能够与 ElasticSearch 实时同步 MongoDB,根据当前月份执行 Filter
,然后 Map
结果要索引的变量数