Skip to content

Instantly share code, notes, and snippets.

View dbenhur's full-sized avatar

Devin Ben-Hur dbenhur

View GitHub Profile
-- Filter an array of events such that there is only one event with each event_id.
-- When more than one event with the same event_id, is present, take the latest one.
CREATE OR REPLACE FUNCTION dedupe_events_2(events HSTORE[]) RETURNS HSTORE[] AS $$
SELECT array_agg(event)
FROM (
-- select first of elements with the same event_id by position in the array, descending.
SELECT first_value(event) as event
OVER (PARTITION BY (event -> 'event_id')::BIGINT ORDER BY index DESC)
FROM (
-- Use unnest instead of generate_subscripts to turn an array into a set.
@dbenhur
dbenhur / block_capture_penalty.rb
Last active August 29, 2015 14:17
Microbenchmark showing the performance penalty of simply specifying a block capture i method arguments
#!/usr/bin/env ruby
require 'benchmark'
N = 10_000_000
def no_capture
end
def block_capture(&_block)
@dbenhur
dbenhur / 0 overview how to reconcile various zk watch metrics
Last active August 29, 2015 14:16
Zookeeper metric discrepencies
# acquire watch metrics
for c in wchs wchc wchp; do echo $c | nc zookeeper3.prod.pages 2181 >$c.zk3; done
# repeated inquiries of wchs show no jitter, these numbers are stable over times much longer
# than the for loop above
cat wchs.zk3
2013 connections watching 218 paths
Total watches:5642
# During this same period, the zk_watch_count metric being reported to graphite was ~ 9200
@dbenhur
dbenhur / set-cardinality-bm.rb
Created June 14, 2013 22:57
Show at what set size inclusion tests are faster for sets vs arrays.
#!/usr/bin/env ruby
require 'benchmark'
require 'set'
N = 5_000_000
MAX_CARD = 5
ARRAYS = (0..MAX_CARD).map {|i| (1..i).to_a}
@dbenhur
dbenhur / to_proc.bm.rb
Created June 5, 2013 17:00
Simple Micro-Benchmark to show Symbol#to_proc performance hit
#!/usr/bin/env ruby
require 'benchmark'
N = 1_000_000
A = (0..10).to_a
def map_plain
A.map {|e| e.to_s}
#!/usr/bin/env ruby
require 'set'
require 'benchmark'
N = 5
HSZ = 150_000
ASZ = 25_000
#!/usr/bin/env ruby
require 'benchmark'
# 456976 four character words
STR = ('aaaa'..'zzzz').to_a * ' '
N = 10
puts RUBY_DESCRIPTION
puts "#{N} times on string of size #{STR.size}"
@dbenhur
dbenhur / yield-vs-block.rb
Last active December 14, 2015 00:58
micro-benchmark comparing various ways to capture and forward a block
#!/usr/bin/env ruby
require 'benchmark'
require 'forwardable'
puts RUBY_DESCRIPTION
class TestMe
extend Forwardable
def_delegators :@arr, :each
#!/usr/bin/env ruby
require 'benchmark'
require 'set'
N = 10_000_000
Benchmark.bm do |x|
1.upto(10) do |i|
a = (0...i).to_a
@dbenhur
dbenhur / so13002594-bm.rb
Created October 22, 2012 02:46
SO #13002594 Handling array of hashes
#!/usr/bin/env ruby
# Benchmark answers to http://stackoverflow.com/questions/13002594/handling-array-of-hashes
require 'benchmark'
A = [{"lib1"=>"30"}, {"lib2"=>"30"}, {"lib9"=>"31"}, {"lib2"=>"31"}, {"lib3"=>"31"}, {"lib1"=>"32"}, {"l\
ib2"=>"32"}, {"lib1"=>"33"}, {"lib3"=>"36"}, {"lib2"=>"36"}, {"lib1"=>"37"}]
def to_a_flat
A.map(&:to_a).flatten(1).each_with_object({}) do |(k, v), h|