为什么像Lucene / Solr这样的文档存储不包含在NoSQL会话中?

时间:2010-07-26 23:46:03

标签: lucene solr nosql

我们所有人最近都遇到过最近对无SQL解决方案的大肆宣传。 MongoDB,CouchDB,BigTable,Cassandra等已被列为无SQL选项。这是一个例子:

http://architects.dzone.com/articles/what-nosql-store-should-i-use

然而,三年前,我和一位同事正在使用Lucene.NET,因为它似乎符合无SQL的描述。我们并没有将其用于用户输入的搜索查询;我们使用它来使一些重新编制索引的RDBMS表数据非常高效。我们实现了自己的.NET等价于Solr服务,以管理这些索引并使它们可调用。当我离开公司时,团队切换到Solr本身。 (对于那些不知情的人,Solr是一个Web服务,它使用REST可调用查询和索引转储来包装Lucene。)

我不明白的是,为什么Solr不计入典型的无SQL解决方案选项列表?我在这里错过了什么吗?我假设Solr与CouchDB等不相似的技术原因,实际上我理解CouchDB使用Lucene作为其数据存储(是吗?),但是什么使Solr失去资格?

我不是要求某种Solr粉丝或任何东西,我只是不明白为什么Solr之类的东西不符合no-SQL的定义,如果Solr在技术上确实符合定义那么呢?它可能会让人嗤之以鼻吗?我问,因为我很难确定是否应该继续使用基于Lucene的解决方案(如Solr)来构建我构建的解决方案,或者我是否应该对这些其他选项进行更多的研究。

6 个答案:

答案 0 :(得分:73)

我曾经听过作家Ursula K. LeGuin关于小说创作的采访。面试官向她询问了以不同的类型写作的作者。是什么让一个作家成为浪漫主义作家,另一个成为神秘作家,另一个成为科幻作家? LeGuin回答说:

  

类型是关于营销,而不是关于内容。

这是令人大开眼界的陈述。

我认为这同样适用于技术解决方案。 NoSQL运动引起了人们的注意,因为它现在充满了营销能量。像Hadoop,CouchDB,MongoDB这样的NoSQL数据存储有商业投资支持它们,推动他们的解决方案成为新的,创新的和令人兴奋的,以便他们可以发展他们的业务。 “NoSQL”这个词是一个营销品牌,可以帮助他们解释自己的价值。

你是对的,Lucene / Solr在技术上与NoSQL文档存储非常相似:它是一个非规范化的文档包(它们的术语),其中的字段在文档集合中不一定一致。它以复杂的方式编制索引,允许您搜索所有字段或特定字段。

但这不是Lucene用来解释其价值的流派。他们没有相同的使命来发展市场和业务,因为他们是由Apache基金会管理的。他们很乐意专注于全文搜索的用例,即使该技术可以用于其他方式。他们遵循软件成功的宗旨:做一件事,做得好。

答案 1 :(得分:13)

在进行了更多Google搜索之后,我认为此文档总结得非常好:

https://web.archive.org/web/20100504055638/http://www.lucidimagination.com/blog/2010/04/30/nosql-lucene-and-solr/

例如,Lucene / Solr NoSql,可以被认为是NoSql更成熟的“前辈”之一。它只是没有得到它应得的NoSql炒作,因为它没有发明术语“no-SQL”并且其用户不使用该术语,所以炒作机器忽略了它。

答案 2 :(得分:5)

我认为solr / lucene的最相关特性是从nosql列表中删除的,因为直到最近,使lucene作为实时系统工作才是一种痛苦。任何高性能应用程序的通常工作流程是批量索引增量更新,例如每5分钟更新一次索引。

答案 3 :(得分:2)

我认为stimpy77 is partly right on the NoSQL being a branding thing。而且,NoSQL意味着它是一个比基于SQL的解决方案更简单/更容易的数据存储平台。而且我认为虽然Solr / Lucene分享了一些方面(它们存储数据),但它确实错过了认为Solr / Lucene可以用作任何有关系的东西的主要数据存储的标记。当然,可以投入大量文档,强大的搜索可以将它们拉回来。但是只要你想要关系,那么像CouchDB和其他人那样的其他人会做得更好,因为它们具有某种查询语法。在这种情况下,搜索是一种绑定解决方案。想想用例“找到用'汽车'标记的所有文件”。如果我的数据中有一些结构,那么我很容易获得标签汽车的文件,并将所有人拉回来。与依赖包含fq = tag:'car'的搜索查询相对应。搜索越来越强大,关系越少,但关系越多,像CouchDB和兄弟这样的数据存储就越好。这就是为什么你仍然看到CouchDB和朋友与Solr配对,反之亦然!让每个人做最好的事情。

当然,这并不是说你无法利用在Solr中存储源数据,这可以成为一个强大的工具!

答案 4 :(得分:1)

在我看来,操作方面没有sql和solr之间的主要区别如下。

  1. Solr需要一个中间数据存储(数据库或XML文件),而nosql本身就是一个直接的数据存储。
  2. 你不能对solr进行持续写入(solr 4.0似乎带来了支持),你只能在每2分钟和200条记录的最大值上进行索引(这对于高吞吐量写入非常慢而且你被迫中间存储)。
  3. 当您更改文档中存储的内容时,需要更改/定义架构。 NoSQL没有这样的定义。
  4. 当索引大小增加而NoSQL针对它进行优化(或声称是:)时,Solr索引具有性能影响。
  5. Solr捆绑了潜在的lucene搜索算法,但在NoSQL中你需要构建它们,这适用于solr提供的宏伟的分面搜索或超快文档搜索。

答案 5 :(得分:0)

最后几点,它的差异不是这里提到的差异,因为solr从NoSQL出来的营销策略

Lucene / Solr - Iam将使用Solr,因为Solr在内部使用lucene并具有附加功能。所以Solr基本上是用新的constume升级到Lucene。

  • Solr主要用于为搜索引擎创建构面和索引纯文本。

  • Solr可以使用大多数数据库来存储其数据。将数据保存在solr中是不一致的,因为它直接使用磁盘。

  • 与Solr相比,NoSQL数据库易于学习。 Solr或多或少地具有许多配置和概念(例如:字段)。

  • 性能是我们必须考虑的事情。与其他NoSQL数据库相比,Solr提供了高性能。

注意:将Solr与某些数据库相结合可提供最佳性能。

摘要: Solr也是一个NoSQL数据存储区,它是所有NoSQL数据库的前身。哪个没有得到别人的炒作。但由于其性能和功率,仍然在现场。