我可以使用Solr代替MongoDB吗?

3
我正在从事一个Web项目,越是思考数据层的设计,我就越认为其中的大部分可以直接从Solr中使用。
例如,聚合和计数操作,而不是使用MapReduce、循环计数或MongoDB中的$inc。
Solr被称为“搜索”解决方案,但我认为它更像是“数据库”解决方案。
对于Solr和数据库解决方案之间的重叠,我感到有些困惑。
有没有类似情况下的人在生产中使用过它?请提供一些建议。
谢谢, Sinisa

你需要存储什么类型的数据,以及需要对这些数据进行哪些操作?在一个项目中,我成功地选择使用Solr来进行文本分析(而非搜索),但是我对数据和操作有非常具体的要求。 - Tony Rad
2个回答

0

Solr是用于搜索的。它不像普通数据库那样被设计成具有弹性或可靠的数据源,也不能处理数据库可以处理的关系类型。例如,没有办法指定外键或强制执行约束。

Solr不支持像mongoDB那样的“嵌套”数据类型。例如,在文档数据库中,您可以拥有:

{
  id: 123,
  title: "cat toy stores",
  stores: [
    {
      name: "cats'n'stuff",
      address: "123 cat street"
    },
    {
      name: "the catteria",
      address: "321 tail lane"
    }
  ]
}

然而,虽然Solr支持多值字段,但它无法表示nameaddress之间的关联,因此,如果这些是给定实体的字段,您最终会得到以下类似的结果:

{
  id: 123,
  title: "cat toy stores",
  store-names: [
    name: "cats'n'stuff",
    name: "the catteria"
  ],
  store-addresses: [
    address: "123 cat street",
    address: "321 tail lane"
  ],
}

没错,然而 MongoDB 也没有外键,唯一的限制是使用 _id 或者你选择的任何字段作为 "_id"。如果你不使用嵌入式文档,并且你的需求是10个平面键/值对,那么你就处于起点,又会陷入“困惑”该用什么 :) - sinisa
1
Solr自4.5版本开始可以存储嵌套文档,因此本答案中的论点已不再有效。更多信息请阅读http://blog.griddynamics.com/2013/09/solr-block-join-support.html。 - vumaasha
我目前没有运行Solr,所以我对它对嵌套数据类型的支持并不了解,但我的答案仍然是普遍适用的:Solr用于搜索,而不是存储关系型数据。 - beerbajay

0

我曾经使用过两者,虽然我同意Mongo被市场推广为数据库而SOLR则明确不是,但我觉得在系统中尽量减少移动部件的数量总是比迎合市场垃圾更重要。 因此,每当可能的时候,我会使用SOLR/Lucene而不是mongo。特别是如果您需要立即进行搜索。

当然,可以配置SOLR DIH从Mongo导入,但为什么要给自己创建额外的工作呢?只需按照示例代码将信息发布到SOLR中即可。 如果您有更多问题,请告诉我。


DIH配置容易吗?我的意思是,与Solr的全平模型相比,您如何处理Mongodb的嵌套能力? - jplot
这里有一个关于DIH的教程,可以让基本配置变得非常简单,只需要复制粘贴即可。@jplot - hd1

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