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中可扩展,有效的全文本搜索。