Skip to content

grosser/random_records

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Database (e.g. MySql) :order=>'rand()' is slow.

Solution

MethodSpeedRandomnessDuplicates
1 cluster from random offsetfastsomewhatno
X times 1 record from random offsetslow for large Xtotalpossible
n clusters of m record from random offsetfastgoodpossible

INSTALL

  • As Rails plugin: script/plugin install git://github.com/grosser/random_records.git
  • As gem: sudo gem install random_record

USAGE

###Find many in single random cluster (no duplicates) Model.random(1) == [Model(id:322)] Model.random(3) == [Model(id:113),Model(id:112),Model(id:114)] Model.with_valid_email.random(3) == [Model(id:114),Model(id:112),Model(id:113)]

###Find many in many random clusters The smaller the slower (each cluster = 1 request)
May include duplicates so use .uniq on results. Model.random(3, :cluster_size=>1) == [Model(id:112),Model(id:98),Model(id:214)]

###Find one random Model.random == Model(id:234) Model.with_valid_email.random == Model(id:123)

TODO

  • prevent duplicates when finding in clusters (searching 9 of 10 -> many requests or tracking which offsets where already fetched)

AUTHOR

Michael Grosser
[email protected]
Hereby placed under public domain, do what you want, just do not hold me accountable...

About

Rails/AR: Fast random records for ActiveRecord

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages