Hello, First of all, thanks a lot for the library. Great work!
Second, sorry for lengthy post. It is kind of bugreport, so I want to provide maximum details. I'm adding search support to my project (Checkvist) and I decided to try using time-based delta indexes (:delta => :datetime). As I understand, this should eliminate performance overhead for delta indexes update when the model is updated. The price is the need to run a separate rake task to update delta indexes periodically. Also, search results will include changed data only after update of the delta indexes. I've added search support, wrote search tests (great Cucumber support for integration testing, BTW!). Everything worked as expected. After that I run my old performance tests for basic operations. And, I've seen noticeable performance degradation for most operations (not only for write operations, but also for read ones). I've made some investigations with the help of NewRelic (in development mode/profiling). Here are some results: 1. read operations were slow when there was many calls to has_many association methods. The problem is in method_missing method ThinkingSphinx::ActiveRecord::HasManyAssociation. When a transaction has hundreds of calls to association methods (like 'all' or 'detect'), this method_missing gives ~10% slowdown of operations in my tests. Given that I'm not using shinx_scopes at all (and search on associations), it would be great to have a way to disable this method_missing. I should say, that even if this method has stub implementation (super), the slow down is still there. I was managed to remove slowdown only when I removed last &block parameter from method_missing. BTW, will_paginate plugin has much faster approach to implement method_missing call for association, and it doesn't use &block parameter. Personally, I'd be glad to remove association patching at all, just to remove performance penalty. 2. write operations gave me ~20% performance penalty in my tests. Despite the fact that I use delayed indexes which should be updated only with rake task, there were some additions to model to support them explicitly (like various before_save and after_commit hooks). And looks like these operations add more slowness. I'm ready to fork thinksphinx and - make an option which disables search on associations (or, at least, support of named scopes for them) - make changes which would suppress various after_commit hooks when delta indexes are timestamp-based. Is it sound reasonable? Or there is something I miss or don't understand? Thanks! KIR -- You received this message because you are subscribed to the Google Groups "Thinking Sphinx" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/thinking-sphinx?hl=en.
