当前位置: 首页 > 面试题库 >

全文搜索和200M +记录的数据库

史鸿运
2023-03-14
问题内容

Iam将创建一个包含至少2亿个条目的庞大数据库。该数据库需要使用全文本进行搜索,并且应该是快速的。

我的数据库从许多不同的数据源获取数据,我需要定期导入新数据或更新数据。

将我的所有数据存储在诸如mysql之类的关系数据库中,然后创建一个nosql文档数据库(例如mongodb或elasticsearch)只是出于搜索目的,还是在可靠性和预防方面没有任何好处,这是一个好主意吗?多余的信息?


问题答案:

我相信将主记录保存在SQL数据库中并将它们复制到noSQL数据库是一种非常常见的方法

ElasticSearch拥有有关其弹性的持续状态页面。即使在最新版本中,ElasticSearch也会在许多不同情况下丢失数据。ElasticSearch索引的结构的重大变化(例如添加分析器)要求您重新索引所有文档。如果您有其他文档来源,则此过程更安全。归根结底,ElasticSearch并非旨在始终如一地存储文档-
在偶然的数据丢失不会造成灾难的情况下,我只会选择使用ElasticSearch作为主要存储。

与ElasticSearch不同,MongoDB旨在具有弹性。您应该能够安全地将文档存储在MongoDB中。我发现尝试在MongoDB中进行全文搜索可能会有些痛苦,至少与ElasticSearch相比。在我看来,对于文本搜索,MongoDB与MySQL的FULLTEXT相比的唯一优势是它是分布式的。

我们现在正在运行ElasticSearch和MySQL-
收益大大超过了额外基础架构和处理两者之间复制的麻烦。我们以前曾尝试将noSQL解决方案用作主要数据存储,但结果却不尽人意。将ES与MySQL结合使用可为您带来两全其美的优势-
SQL中数据的一致性和安全性,以及ES中可扩展,有效的全文本搜索。



 类似资料:
  • 假设我有一个存储加密文本的服务器(端到端:服务器永远看不到纯文本)。 我希望能够对该文本进行全文搜索。 我知道这很棘手,但我的想法是使用传统的全文设计(“列表”和“匹配”表,其中存储单词并与内容表中的id匹配)。当用户提交加密文本时,他们还会发送单词和各自匹配的加盐MD5。使用的盐对于每个用户都是唯一的,并且从他们的密码中恢复。 (简而言之:唯一的区别是“列表”表将包含哈希单词) 现在,这个系统会

  • 问题内容: 我正在将所有站点代码从使用mysql_ *函数转换为PDO。对于我的需求,PDO上的PHP文档尚不清楚。它为您提供了要使用的功能,但没有详细介绍它们在不同情况下的功能。 基本上,我有一个mysql全文搜索: 实际的语句要长得多,但这基本上就是它的作用。 我的问题是,如何将其纳入PDO? 我知道您不是要在位置标记周围使用引号,那么您是否将它们放在AGAINST()函数中?我包括他们吗?如

  • 回顾 在前面的章节(分页),我们已经加强了数据库查询,因此能够在页面上获取各种查询。 今天,我们会继续探讨数据库的话题,只是领域不同。所有存储内容的应用程序必须提供搜索能力。 许多其它类型的网站可能使用了谷歌、必应等索引所有的内容并且提供查询结果。这个对于大多数静态页面的网站,像论坛,是很好用。我们应用程序 microblog 的基本单元是用户短小的 blog,不是整个页面。我们希望搜索结果是动态

  • 我使用的是Micronaut数据版本1.0.2。 给定以下JPA实体类: 我可以使用的以下方法创建全文搜索查询: 但是,我有一个问题,需要为名称属性添加另一个标准。我想要实现的相当于以下SQL: 我测试了以下方式: 知道怎么让它工作吗? 提前感谢。

  • 问题内容: 我尝试在elasticsearchJava API上使用正则表达式运行全文搜索。我的过滤器是这样的: 但是它只与一个单词匹配,而没有短语匹配。我的意思是,例如: 如果soruce中有一个字符串,例如:“ ”,而当我的文本字符串如下:“ ”,“ ”,“ ” …时,它就起作用了。 但是,当我的realTimeTextIn字符串为“ ”时,全文搜索将不起作用。我搜索的单词不能超过一个。 我在

  • 我尝试在弹性搜索java api上使用正则表达式运行全文搜索。我的过滤器是这样的: 但是它只与一个单词匹配,而不是与短语匹配。我的意思是,例如: 如果soruce中有一个字符串,如:“