我即将创建一个拥有至少2亿条目的庞大数据库。 数据库需要使用全文搜索,并且应该很快。
我的数据库从许多不同的数据源获取数据,我需要定期导入新的或更新的数据。
将我的所有数据存储在像mysql这样的关系数据库中,然后创建一个nosql文档数据库(例如mongodb或elasticsearch)只是为了搜索目的或者没有提供任何好处,这是一个好主意吗? 可靠性和防止冗余信息?
答案 0 :(得分:2)
我认为将主记录保存在SQL数据库中并将它们复制到noSQL数据库是一种非常常见的方法。
ElasticSearch有一个关于他们resiliency的持续状态页面。即使在最新版本中,ElasticSearch也可以在a number of different situations中丢失数据。 ElasticSearch索引结构的重大更改(例如添加分析器)需要re-index所有文档。如果您有其他文档来源,则此过程更安全。在一天结束时,ElasticSearch并非旨在一致地存储文档 - 在偶尔丢失数据并非灾难的情况下,我只会选择使用ElasticSearch作为主存储。
与ElasticSearch不同,MongoDB被设计为resilient。您应该能够在MongoDB中安全地存储文档。我发现尝试在MongoDB中进行全文搜索可能会有点痛苦,至少与ElasticSearch相比。在我看来,对于文本搜索,MongoDB对MySQL FULLTEXT的唯一优势是它是分布式的。
我们现在正在运行ElasticSearch和MySQL - 其好处大大超过了额外基础架构的麻烦和处理两者之间的复制。我们之前曾尝试使用noSQL解决方案作为主数据存储区,并带来灾难性的后果。与MySQL一起运行ES可以让您获得两全其美 - 一致性和优势SQL中的数据安全性,ES中的可扩展,有效的全文搜索。
答案 1 :(得分:0)
我不知道你的情况如何适用,但Evan Weaver compared a few of the common Rails search options (Sphinx, Ferret and Solr),运行一些基准测试。