为什么像Lucene / Solr这样的文档商店没有包含在NoSQL对话中?

我们所有人最近都遇到过最近的非SQL解决scheme的炒作。 MongoDB,CouchDB,BigTable,Cassandra和其他已被列为非SQL选项。 这是一个例子:

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

但是,三年前,一名同事和我正在使用Lucene.NET,因为它似乎适合于非SQL的描述。 我们没有使用它只是为了用户input的search查询; 我们用它来使一些重新索引的RDBMS表格数据非常高效。 我们实现了自己的.NET等价于Solr的服务来pipe理这些索引并使之可以被调用。 当我离开公司时,团队转向了Solr本身。 (对于那些不了解的人,Solr是一个Web服务,它使用REST可调用的查询和索引转储来包装Lucene。)

我不明白的是,为什么Solr不包括在没有SQL解决scheme的典型列表中? 我在这里错过了什么? 我认为Solr和CouchDB等没有可比性的技术原因,事实上我明白CouchDB使用Lucene作为它的数据存储(yes?),但是什么使得Solr不合格呢?

我并不是要求某种Solr fanboy或任何东西,我只是不明白为什么Solr等不符合no-SQL的定义,如果Solr在技术上符合定义,那么它可能会如何人们噗噗呢? 我在问,因为我很难确定我是否应该继续使用基于Lucene的解决scheme(如Solr)来构build解决scheme,或者如果我真的需要使用这些其他选项进行更多的研究。

我曾经听过关于小说写作的作者乌苏拉·K·莱金的采访。 面试官问她有关从事不同文体工作的作者。 是什么让一个作者成为浪漫作家,另一个是一个神秘作家,另一个是一个科幻作家? LeGuin解释道:

stream派是关于市场营销,而不是关于内容。

这是一个令人大开眼界的声明。

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

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

但这不是Lucene用来解释其价值的types。 由于他们是由Apache基金会pipe理的,所以他们没有同样的使命来发展市场和业务。 他们很乐意专注于全文search的用例,即使这种技术可以用于其他方面。 他们遵循软件成功的宗旨:做一件事,做得好。

在做了更多的谷歌search之后,我认为这个文档总结得非常好:

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

例如,Lucene / Solr NoSql,可以被看作NoSql更成熟的“前辈”之一。 它只是没有得到应有的NoSql炒作,因为它没有发明术语“没有SQL”,它的用户不使用这个术语,所以炒作机器忽视了它。

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

我认为stimpy77在NoSQL作为一个品牌的东西是部分正确的 。 而且,NoSQL意味着它是一个数据存储平台,比基于SQL的解决scheme更简单/更简单。 我认为,虽然Solr / Lucene共享某些方面(它们存储数据),但它真的错过了认为Solr / Lucene可以用作任何有关系的主要数据存储。 当然,很多文件都可以扔进去,强大的search把它们拉回来。 但是一旦你想要关系,那么其他人(比如CouchDB和其他人)就可以更好地进行查询。 在这种情况下,search是一个绷带解决scheme。 想一想用例“查找所有标记为单词”car“的文档。 如果我的数据中有一些结构,那么我很容易拿到标签车的文件,并把所有人拉回来。 与依靠包含fq = tag:'car'的search查询。 search越是越强大,你拥有的关系越less,但是关系越多,像CouchDB和弟兄们这样的数据存储就越好。 这就是为什么你仍然看到CouchDB和朋友与Solr配对,反之亦然! 让每个人都做到最好。

当然,这并不是说你不能将你的源数据存储在Solr中,这可能是一个强大的工具!

在我看来,在操作上没有sql和solr的主要区别是下面的。

  1. Solr需要一个中间数据存储(数据库或XML文件),而nosql本身是一个直接的数据存储。
  2. 你不能对solr进行一个常量写操作(solr4.0似乎会带来这种支持),你只能在每2分钟和200条logging的最大值处编制索引(对于高吞吐量写操作非常缓慢,而你被强制作为中间存储) 。
  3. 当您更改存储在文档中的内容时,您需要更改/定义模式。 NoSQL没有这样的定义。
  4. 当索引大小增长时,索引索引具有性能意义,而NoSQL为其优化(或声称是:))
  5. Solr有捆绑的底层lucenesearchalgorithm,但在NoSQL中需要构build它们,这适用于由solr提供的华丽的search或快速的文档search。

最后却没有几点,它与这里提到的不同,就是Solr从NoSQL走出来的营销策略

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

  • Solr主要用于为search引擎创build构面和索引明文。

  • Solr可以使用大部分数据库来存储数据。 由于直接使用磁盘,因此将数据保存在solr中是不一致的。

  • 与Solr相比,NoSQL数据库很容易学习。 Solr或多或less有很多configuration和概念(例如:Fields)。

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

注意:将Solr和一些数据库结合起来可以提供最好的性能。

简介: Solr也是NoSQL数据存储,它是所有NoSQL数据库的前身。 没有得到别人的炒作。 但由于其performance和实力,仍然在这个领域。