我已经开发了一段时间的rails应用程序,但不幸的是,我的应用程序中没有一个拥有大量的数据或流量。但现在我有一个正在增长的动力。因此,我首先潜入头部,扩展和优化我的应用程序。
似乎第一步也是最简单的一步就是使用数据库索引。我有一个很好的索引列表,应该涵盖我所有的查询,但是当我通过迁移将它们添加到数据库时,添加它们只需要几秒钟。出于某种原因,我认为它们必须遍历我的所有条目(其中有数千条)并对它们进行索引。
这是否意味着我的索引没有应用于我已经存在的数据?它们只会被添加到新的条目中吗?
此外,我还在研究其他扩展解决方案,比如memcached,以及简化我的查询等。
如果有人能告诉我一些优化我的rails 3应用程序的好资源,我会非常感激的!
谢谢!
编辑:
感谢所有关于数据库索引的伟大答案!在优化和扩展我的应用程序方面,我还应该考虑什么呢?梅卡奇?在优化方面,最佳的性能提升/努力比率是多少?
发布于 2011-05-22 13:43:27
在您的所有ID和数据中添加索引(您的“find_by”)总是一个好主意,在更多的场合,例如email_address。同样,您可以安全地假设ID永远不会变为负值,因此使ID列无签名将长期受益。与任何DBA (数据库管理员)交谈,他们会的,很多次告诉您这样做。
目前,您很可能在所有ID列中都有这样的内容.
t.integer :column_name, :null => false或者..。
t.references :column_name, :null => false只要把这个改成..。
t.column :column_name, 'integer unsigned', :null => false你会看到一个微小的增长。
索引很简单..。
add_index :reviews, [:column_id, :column_type] # Polymorphic
add_index :reviews, :column_id # StandardRails API应该给你所有你需要知道的东西。
Peepcode有一个真正的get tutorial video,这对我来说是一个很好的洞察力,并且非常值得你花费12到37分钟的时间。有像MetaWhere这样的宝石,它们也可以帮助你。
最重要的是,在Rails 3和更高版本中,是ActiveRelations。这是只有在需要时才执行查询的地方。例如,关闭User.all,您可以调用User.scoped,并且当视图中的迭代发生时,执行中的SQL将被执行。强大的东西和铁路的未来。
告诉我们你是怎么相处的..。万事如意。
https://stackoverflow.com/questions/6087350
复制相似问题