Mysql 将面向文档的dbms作为主数据库,将RDBMS数据库作为辅助数据库?

Mysql 将面向文档的dbms作为主数据库,将RDBMS数据库作为辅助数据库?,mysql,ruby-on-rails,database,solr,document-oriented-db,Mysql,Ruby On Rails,Database,Solr,Document Oriented Db,由于MySQL数据库的规范化,我遇到了一些性能问题 我的大多数使用数据库的应用程序都需要执行一些繁重的嵌套查询,在我的例子中,这需要很多时间。使用索引运行查询可能需要2秒钟。没有索引大约45秒 几个月前我遇到的一个解决方案是使用更快、更线性的基于文档的数据库(在我的例子中是Solr)作为主数据库。MySQL数据库中的某些内容一旦更改,Solr就会收到通知 这真的很棒。使用Solr数据库的所有查询只需3毫秒左右 数字看起来不错,但我有一些问题 庞大的数据库 MySQL数据库约为200mb,So

由于MySQL数据库的规范化,我遇到了一些性能问题

我的大多数使用数据库的应用程序都需要执行一些繁重的嵌套查询,在我的例子中,这需要很多时间。使用索引运行查询可能需要2秒钟。没有索引大约45秒

几个月前我遇到的一个解决方案是使用更快、更线性的基于文档的数据库(在我的例子中是Solr)作为主数据库。MySQL数据库中的某些内容一旦更改,Solr就会收到通知

这真的很棒。使用Solr数据库的所有查询只需3毫秒左右

数字看起来不错,但我有一些问题

  • 庞大的数据库
MySQL数据库约为200mb,Solr db包含约1.4Gb的数据。 每次我需要更改表/列时,数据库都需要重新编制索引,在本例中,这花费了12个多小时

  • 如果不获取,很难同时呈现Solr对象和活动记录(MySQL)对象
视图依赖于某个对象。它不关心它自己的对象是活动记录对象还是Solr对象,只要它可以调用它上面的一组属性

像这样

# Controller
@song = Song.first

# View
@song.artist.urls.first.service.name
在我的例子中,问题是从Solr返回的数据是这样的平面

{
  id: 123,
  song: "Waterloo",
  artist: "ABBA",
  service_name: "Groveshark",
  urls: ["url1", "url2", "url3"]
}
这迫使我构建一个可以传递给视图的活动记录对象

我的问题

有没有更好的办法来解决这个问题?
某种可以快速处理复杂查询的超级duper fast主只读数据库会很好。

与其将数据推送到Solr中以扁平化记录,不如在MySQL数据库中创建一个单独的表,该表针对只读访问进行了优化

而且你似乎自相矛盾

视图依赖于某个对象。它不关心它自己的对象是活动记录对象还是Solr对象,只要它可以调用它上面的一组属性

在我的例子中,问题是从Solr返回的数据是平坦的。。。这迫使我构建一个可以由视图渲染的假活动记录对象

Solr单个字段更新 关于在模式更改时重新编制所有索引:Solr尚未解决,但关于这一点还有一个问题尚未解决。然而,您更改了多少次模式

蒙哥达 如果您没有RDBMS(没有连接、模式、事务、外键约束),也没有基于文档的数据库, 或者CouchDB会是一个完美的选择。(这是他们之间的一个很好的比较)

为什么要使用MongoBD:

  • 数据是本机格式的(您可以在视图中直接使用ORM映射器,因此不需要像使用Solr那样调整记录)
  • 对非全文搜索查询的性能非常好
  • 无架构(无需迁移)
  • 内置,易于安装
为什么要使用SOLR:

  • 高级、高性能的全文搜索
为什么要使用MySQL

  • 连接、约束、事务
解决 因此,解决方案(组合)为:

  • 使用MongoDB+Solr

    • 但您仍然需要在模式更改时重新编制所有索引
  • 仅使用MongoDB

    • 但是放弃对高级全文搜索的支持
  • 在主从配置中使用MySQL,并平衡从(使用插件)+Solr)读取的数据

    • 设置复杂性
  • 保持当前设置,对MySQL中的数据进行非规范化

    • 凌乱
  • Solr重新索引慢度 MySQL数据库约为200mb,Solr db包含约1.4Gb的 数据每次我需要更改表/列时,数据库都需要 要重新编制索引,在本例中需要12个多小时

    在Solr中重新索引200MB DB不应花费12小时!很可能您还有其他问题,如:

    MySQL:

    • 索引
    解决方案:

    • 每次请求后提交-这是默认设置,即您使用类似sunspot的插件,但这是一个
    发件人:

    • 默认情况下,Sunspot::Rails在每个请求结束时提交 这将更新Solr索引。把它关掉。
      • 使用Solr的自动提交 功能。这是在solr/conf/solrconfig.xml中配置的
      • 是 为假设的不一致而高兴。不要在需要搜索结果的地方使用搜索 到第二个
    • 其他设置问题(http://wiki.apache.org/solr/SolrPerformanceFactors#Indexing_Performance)

    查看日志了解更多详细信息

    我不确定你所说的“矛盾”部分是什么意思。视图需要一个类似以下内容的对象:
    @song.artist.url.first.service.name
    。Solr没有提供,所以我必须自己建立一个。换句话说,视图不关心对象是否是AR对象,只要刚才提到的属性存在。以为你说你总是需要转换成AR对象b/c,你在构建一个假的对象,就在那之前你说你的视图不在乎。。。现在我明白了,因为它只需要属性。每个表中都有ID号吗?