【问题标题】:MySQL, MongoDB and SolrMySQL、MongoDB 和 Solr
【发布时间】:2012-02-27 20:26:15
【问题描述】:

我对 NoSQL 数据库不太熟悉,也不太了解它们的潜力,而且我还在学习。同时,我需要开发具有搜索功能的简单应用程序。

我已经阅读了一些关于 Solr、MongoDB 及其组合的文章。但是,我必须创建的应用程序应该包括许多“标准”的东西(比如应该从数据库中填充的组合框)。此外,还有元数据字段和其他附加信息。

我想到的想法是开发 MySQL 数据库来保存关系数据(如元数据、组合框值、注释......)。对于每条记录,我可以生成应该转发给 Solr 的 ID,以及应该被索引的文档。 Solr 将进行索引,并且分配了 ID 的文档可以存储在 MongoDB 中。

可能有一种更简单的方法,我想听听 :) 这并不难,但我不确定这是最好的方法。在一天结束时,应用程序应该相当简单:用户应该选择几个预定义的字段,输入更多的字段并上传一个文档(或其中几个)。如果有人可以建议更好的架构,请提供建议。

最好的

【问题讨论】:

    标签: mysql mongodb solr


    【解决方案1】:

    我将从文档结构开始。

    但是,我必须创建的应用程序,应该包括许多“标准” 东西(比如组合框,应该从数据库中填充)。 此外,还有元数据字段和其他附加信息。

    听起来 mongodb 非常适合您要存储的数据,因为您可以将所有与组合框数据相关的内容保存在 mongodb 的单个文档中,这将非常自然。在 mysql 中,对于所有引用的内容,例如注释、值,您可能会使用单独的表。

    这是 mongodb 中潜在模式的示例:

    {
     _id : 1,
     name : "andrew",
      values: [
           {_id: 1,
           name: "test 1"},
           {_id: 2,
           name: "test 2"},
       ],
      metadata: {
        storeDate: someDate, 
        anyOtherMetadata: ""
      },
      notes: [
        {_id: 1, "note 1"},
        {_id: 2, "note 2"},
      ]
    }
    

    如果您的应用应该有全文搜索,您可以在每次更新/插入时存储两次信息。在 mongodb 中排名第一,在 solr 中排名第二。同样在排序中,您可以拥有需要向最终用户显示的文档(它通常不包含数据库中包含文档的所有信息):

    solr 文档:

    {
      _id: 1,
      name: "andrew",
      searchField: "here you can store all staff on what you want search"
    }
    

    Solr 文档 _id 对应于 mongodb 文档 _id。

    所以:

    1. 使用上述架构,当您需要搜索时,您可以简单地从 solr 填充数据
    2. 但是当您需要显示特定文档的详细信息时,您可以通过 solr _id 从 mongodb 加载它。

    一般来说,我在你的应用程序中看不到 mongodb、mysql 和 solr 在一起。

    我只看到两个合理的组合:

    1. mongodb + solr
    2. mysql + solr

    【讨论】:

    • 谢谢安德鲁! MySQL 的关键在于我不知道我可以使用 MongoDB 做什么。我刚刚开始了解它。答案非常详细,它有很大帮助。它将是 MongoDB 和 Solr。我将根据存储在 mongodb 中的数据过滤文档(“给我所有名称以...开头的文档”等),并使用 solr 进行搜索。就像你说的,应该很容易根据 solr 提供的 id 从 mongodb 读取文档。再次感谢您。
    猜你喜欢
    • 2020-10-19
    • 1970-01-01
    • 2012-08-19
    • 2013-05-22
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 2011-11-03
    • 2011-10-14
    相关资源
    最近更新 更多