random_records

Created: 2008-12-28 12:39
Updated: 2016-10-20 08:34

README.markdown

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

Solution

Method Speed Randomness Duplicates
1 cluster from random offset fast somewhat no
X times 1 record from random offset slow for large X total possible
n clusters of m record from random offset fast good possible

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
grosser.michael@gmail.com
Hereby placed under public domain, do what you want, just do not hold me accountable...

Cookies help us deliver our services. By using our services, you agree to our use of cookies Learn more