【发布时间】:2011-10-12 19:47:33
【问题描述】:
由于 MySQL 数据库的规范化,我遇到了一些性能问题。
我的大多数使用数据库的应用程序都需要执行一些繁重的嵌套查询,在我的情况下这需要很多时间。查询可能需要 2 秒才能运行,有索引。没有索引大约 45 秒。
几个月前我遇到的一个解决方案是使用更快、更线性的基于文档的数据库,在我的例子中是 Solr,作为主数据库。一旦 MySQL 数据库发生变化,Solr 就会收到通知。
这真的很棒。使用 Solr 数据库的所有查询只用了大约 3ms。
数字看起来不错,但我遇到了一些问题。
- 庞大的数据库
MySQL 数据库大约 200mb,Solr db 包含大约 1.4Gb 的数据。 每次我需要更改表/列时,都需要重新索引数据库,在此示例中需要 12 多个小时。
- 很难在不获取 wet 的情况下同时呈现 Solr 对象和 Active Record (MySQL) 对象。
视图依赖于某个对象。它不关心自己的对象是 Active Record 对象还是 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"]
}
这迫使我构建一个可以传递给视图的活动记录对象。
我的问题
有没有更好的方法来解决这个问题? 某种可以快速处理复杂查询的超级快速的主只读数据库会很好。
【问题讨论】:
-
每张桌子都有身份证号码吗?
标签: mysql ruby-on-rails database solr document-oriented-db