Skip to main content

Tracking and fixing issues for query optimisation

Queries being executed along with time and space complexity helps to optimise database in the best possible ways. Though this topic has been covered vastly, i will pull the very basic ones for the beginners.

In rails applications, active record is being used as a wrapper for SQL databases. In order to view each query which is being executed below to get a clear idea, add the corresponding MySQL query 

ActiveRecord::Base.logger = Logger.new(STDOUT) 

Use joins to combine tables if they have a association and then fetch data. When you loop over this fetched data in first place, queries to access related data from other model will not be executed as it is already available.
Eager loading will not work in NoSQL databases as in case with MongoDB due to the absence of joins.Even though 
The identity map in Mongoid is a current aid to assist with excessive database queries in relations, and is necessary for eager loading to work. Refer:   Mongoid Identity Map


Add to_a or .entries or .first after query as mongoid returns only the criteria.

        For ex- User.where(name: /a/).entries

so when that criteria is used, queries for each operation are fired. This will makes sure the entire data set is available and any operation will be performed on that data without hitting server to fetch data.

MongoDB works with lazy loading as it returns only criteria in first place and when you loop over the data each query is fired to fetch single row at a time which can be avoided as said above.

Comments

Popular posts from this blog

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 (%...

upload images to AWS::S3 in ruby using aws sdk gem

Using gem aws-sdk for a ROR application for uploading images to s3 Uploading images to a fixed bucket with different folders for each object or application. The s3 keeps a limitation on the number of buckets creation whereas there is no limitation for content inside a bucket. This code will upload image for a user to s3 using aws-sdk gem. The bucket and the image uploaded are made public, so that the images uploaded are directly accessible. The input is takes is the image complete path where it is present, folder in which it should be uploaded and user_id for whom it should be uploaded. def save_screenshot_to_s3(image_location, folder_name,user_id) service = AWS::S3.new(:access_key_id => ACCESS_KEY_ID, :secret_access_key => SECRET_ACCESS_KEY) bucket_name = "app-images" if(service.buckets.include?(bucket_name)) bucket = service.buckets[bucket_name] else bucket = service.buckets.create(bucket_name...