全文搜索和2亿多条记录的数据库

4

我即将创建一个至少包含2亿条记录的巨型数据库。该数据库需要支持全文搜索,并且需要快速响应。

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

是否有必要将所有数据存储在关系型数据库(如mysql)中,然后再创建一个nosql文档数据库(例如mongodb或elasticsearch)专门用于搜索?这样做是否会提高可靠性并减少冗余信息?


使用Elasticsearch,你可以从可靠性和水平扩展性中受益,即速度与代价的权衡。但一般来说,关于推荐软件的问题是不适合讨论的。 - Alex Blex
谢谢,但问题不在于“正确”的软件,而更多地在于将相同的数据放入关系数据库中是否有任何好处。 - dknaack
如果您仅需要文本搜索,则只使用ES即可。 如果您需要其他功能,例如事务,一致性等,则建议使用SQL。 - Alex Blex
2个回答

5
我相信将主要记录存储在SQL数据库中并复制到noSQL数据库是一种非常普遍的方法。
ElasticSearch有一个关于其弹性的持续状态页面resiliency。即使是最新版本的ElasticSearch,也会在多种情况下丢失数据。 ElasticSearch索引结构的重大变化(例如添加分析器)需要重新索引所有文档。如果您有另一个文档来源,则此过程更加安全。归根结底,ElasticSearch并不设计用于持续存储文档- 我只会选择在偶尔出现数据丢失不是灾难性的情况下使用ElasticSearch作为主要存储。
与ElasticSearch不同,MongoDB旨在具有弹性。您应该能够安全地存储文档在MongoDB中。我发现在MongoDB中进行全文搜索可能会有些麻烦,至少与ElasticSearch相比是这样的。在我看来,对于文本搜索,MongoDB唯一优于MySQL的FULLTEXT的优势在于它具有分布式特性。
我们目前正在运行ElasticSearch和MySQL,收益大大超过了额外基础设施和处理两者之间复制的麻烦。我们之前尝试将noSQL解决方案用作主要数据存储,结果灾难性。使用ES与MySQL并行可让您获得最佳的双重优势 - SQL中数据的一致性和安全性,以及ES中可扩展、有效的全文搜索。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接