Skip to main content

MongoDB query optimisation

 Before you read below, make sure MongoDB is the right choice for your application. It's Nonrelational and Document oriented database.

Mongoid::Criteria Let's say you query all user data, @users = User.all while using mongoid. So when you access @users in views, it's Mongoid::Criteria and
ruby methods will not work ex- to_json. When we iterate over @users, say

@users.each do |user| 
  p user
end

For each user entry, query is fired which could easily be avoided by changing the query to @users = User.all.entries or @users = User.all.to_a. Also for single object @user = User.where(email: "bijendra.biju@gmail.com").first.

Index your database: use the specific fields while indexing which will fasten the search. Indexes improve the efficiency of read operations by reducing the amount of data that query operations need to process.
Apart from read operations indexes can support sort operation and allow for a more efficient storage utilization.

For ex: If you need to implement search over user database, index the specific fields which will be used for searching. By default _id will be created and indexed,


class User
  include Mongoid::Document
  field :name, :type => String
  field :email, :type => String
  index({ email: 1 })
end

http://docs.mongodb.org/manual/core/map-reduce/
http://docs.mongodb.org/manual/core/aggregation-pipeline/

Comments

Popular posts from this blog

Cannot allocate memory error while computing files - Setup Swap space

ActionView::Template::Error (Cannot allocate memory - nodejs /tmp/execjs20131021-26716-fckzo3.js 2>&1 Nodejs is used to compile javascript at runtime. In RoR applications, this error comes when server is started in production mode which compiles the assets or while running rake assets:precompile . check for swap space and allocate

RubyConf 2013 at pune..retrieved from drafts

A great experience while interacting with the ruby community from different places. Lots of knowledge and inspiration flows. Met many folks from india and abroad.

Understanding TOP command and purpose

$top top - 12:24:34 up 9 days, 21:58, 0 users, load average: 5.98, 5.32, 4.30 Tasks: 13 total, 1 running, 12 sleeping, 0 stopped, 0 zombie %Cpu(s): 5.5 us, 1.5 sy, 0.0 ni, 92.6 id, 0.0 wa, 0.0 hi, 0.5 si, 0.0 st KiB Mem: 12969522+total, 11112360+used, 18571628 free, 135900 buffers KiB Swap: 0 total, 0 used, 0 free. 49328208 cached Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 40 root 20 0 1466540 912540 12568 S 7.7 0.7 67:03.03 bundle 43 root 20 0 1413152 860252 11116 S 6.7 0.7 65:41.24 bundle The load averages indicate the average number of processes waiting for CPU time over the specified time periods. Shows running processes and their status. Buffer is the amount of data used while it's being written or read. The numbers are in KiB's showing the RAM available on system us - user process sy - system process process ID (PID), user, priority (PR), virtual memory usage (VIRT), resident memory usage (RES), shared memory usage (SHR), CPU usage (%