moneta 0.7.4 → 0.7.5
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -2
- data/.travis.yml +20 -13
- data/CHANGES +5 -0
- data/Gemfile +24 -25
- data/LICENSE +1 -1
- data/README.md +32 -16
- data/Rakefile +36 -6
- data/lib/moneta/builder.rb +20 -6
- data/lib/moneta/mixins.rb +11 -4
- data/lib/moneta/version.rb +1 -1
- data/script/benchmarks +378 -0
- data/script/{generate-specs.rb → generate-specs} +92 -83
- data/script/install-bundle +26 -0
- data/script/kill-travis +16 -0
- data/script/start-services +8 -0
- data/script/upload-bundle +2 -0
- data/spec/helper.rb +9 -3
- data/spec/moneta/adapter_activerecord_spec.rb +1 -1
- data/spec/moneta/adapter_cassandra_spec.rb +1 -1
- data/spec/moneta/adapter_cassandra_with_default_expires_spec.rb +2 -2
- data/spec/moneta/adapter_client_spec.rb +1 -1
- data/spec/moneta/adapter_cookie_spec.rb +2 -2
- data/spec/moneta/adapter_couch_spec.rb +1 -1
- data/spec/moneta/adapter_datamapper_spec.rb +1 -1
- data/spec/moneta/adapter_daybreak_spec.rb +2 -2
- data/spec/moneta/adapter_dbm_spec.rb +1 -1
- data/spec/moneta/adapter_file_spec.rb +1 -1
- data/spec/moneta/adapter_fog_spec.rb +2 -2
- data/spec/moneta/adapter_gdbm_spec.rb +1 -1
- data/spec/moneta/adapter_hbase_spec.rb +1 -1
- data/spec/moneta/adapter_leveldb_spec.rb +1 -1
- data/spec/moneta/adapter_localmemcache_spec.rb +1 -1
- data/spec/moneta/adapter_lruhash_spec.rb +2 -2
- data/spec/moneta/adapter_memcached_dalli_spec.rb +1 -1
- data/spec/moneta/adapter_memcached_dalli_with_default_expires_spec.rb +1 -1
- data/spec/moneta/adapter_memcached_native_spec.rb +1 -1
- data/spec/moneta/adapter_memcached_native_with_default_expires_spec.rb +1 -1
- data/spec/moneta/adapter_memcached_spec.rb +1 -1
- data/spec/moneta/adapter_memcached_with_default_expires_spec.rb +1 -1
- data/spec/moneta/adapter_memory_spec.rb +19 -1
- data/spec/moneta/adapter_mongo_spec.rb +2 -2
- data/spec/moneta/adapter_mongo_with_default_expires_spec.rb +1 -1
- data/spec/moneta/adapter_pstore_spec.rb +1 -1
- data/spec/moneta/adapter_redis_spec.rb +1 -1
- data/spec/moneta/adapter_redis_with_default_expires_spec.rb +1 -1
- data/spec/moneta/adapter_restclient_spec.rb +1 -1
- data/spec/moneta/adapter_riak_spec.rb +1 -1
- data/spec/moneta/adapter_sdbm_spec.rb +1 -1
- data/spec/moneta/adapter_sequel_spec.rb +1 -1
- data/spec/moneta/adapter_sqlite_spec.rb +1 -1
- data/spec/moneta/adapter_tdb_spec.rb +1 -1
- data/spec/moneta/adapter_tokyocabinet_bdb_spec.rb +1 -1
- data/spec/moneta/adapter_tokyocabinet_hdb_spec.rb +1 -1
- data/spec/moneta/adapter_yaml_spec.rb +1 -1
- data/spec/moneta/cache_file_memory_spec.rb +2 -2
- data/spec/moneta/cache_memory_null_spec.rb +2 -2
- data/spec/moneta/expires_file_spec.rb +1 -1
- data/spec/moneta/expires_memory_spec.rb +19 -19
- data/spec/moneta/expires_memory_with_default_expires_spec.rb +19 -19
- data/spec/moneta/lock_spec.rb +19 -1
- data/spec/moneta/null_adapter_spec.rb +1 -1
- data/spec/moneta/optionmerger_spec.rb +14 -1
- data/spec/moneta/pool_spec.rb +1 -1
- data/spec/moneta/proxy_expires_memory_spec.rb +19 -1
- data/spec/moneta/proxy_redis_spec.rb +1 -1
- data/spec/moneta/shared_spec.rb +3 -3
- data/spec/moneta/simple_activerecord_spec.rb +1 -1
- data/spec/moneta/simple_activerecord_with_expires_spec.rb +1 -1
- data/spec/moneta/simple_cassandra_spec.rb +1 -1
- data/spec/moneta/simple_client_tcp_spec.rb +1 -1
- data/spec/moneta/simple_client_unix_spec.rb +1 -1
- data/spec/moneta/simple_couch_spec.rb +1 -1
- data/spec/moneta/simple_couch_with_expires_spec.rb +1 -1
- data/spec/moneta/simple_datamapper_spec.rb +1 -1
- data/spec/moneta/simple_datamapper_with_expires_spec.rb +1 -1
- data/spec/moneta/simple_datamapper_with_repository_spec.rb +1 -1
- data/spec/moneta/simple_daybreak_spec.rb +1 -1
- data/spec/moneta/simple_daybreak_with_expires_spec.rb +1 -1
- data/spec/moneta/simple_dbm_spec.rb +1 -1
- data/spec/moneta/simple_dbm_with_expires_spec.rb +1 -1
- data/spec/moneta/simple_file_spec.rb +1 -1
- data/spec/moneta/simple_file_with_expires_spec.rb +1 -1
- data/spec/moneta/simple_fog_spec.rb +1 -1
- data/spec/moneta/simple_fog_with_expires_spec.rb +1 -1
- data/spec/moneta/simple_gdbm_spec.rb +1 -1
- data/spec/moneta/simple_gdbm_with_expires_spec.rb +1 -1
- data/spec/moneta/simple_hashfile_spec.rb +1 -1
- data/spec/moneta/simple_hashfile_with_expires_spec.rb +1 -1
- data/spec/moneta/simple_hbase_spec.rb +1 -1
- data/spec/moneta/simple_hbase_with_expires_spec.rb +1 -1
- data/spec/moneta/simple_leveldb_spec.rb +1 -1
- data/spec/moneta/simple_leveldb_with_expires_spec.rb +1 -1
- data/spec/moneta/simple_localmemcache_spec.rb +1 -1
- data/spec/moneta/simple_localmemcache_with_expires_spec.rb +1 -1
- data/spec/moneta/simple_lruhash_spec.rb +1 -1
- data/spec/moneta/simple_lruhash_with_expires_spec.rb +1 -1
- data/spec/moneta/simple_memcached_dalli_spec.rb +1 -1
- data/spec/moneta/simple_memcached_native_spec.rb +1 -1
- data/spec/moneta/simple_memcached_spec.rb +1 -1
- data/spec/moneta/simple_memory_spec.rb +1 -1
- data/spec/moneta/simple_memory_with_compress_spec.rb +1 -1
- data/spec/moneta/simple_memory_with_expires_spec.rb +1 -1
- data/spec/moneta/simple_memory_with_json_key_serializer_spec.rb +1 -1
- data/spec/moneta/simple_memory_with_json_serializer_spec.rb +1 -1
- data/spec/moneta/simple_memory_with_json_value_serializer_spec.rb +1 -1
- data/spec/moneta/simple_memory_with_prefix_spec.rb +1 -1
- data/spec/moneta/simple_memory_with_snappy_compress_spec.rb +1 -1
- data/spec/moneta/simple_mongo_spec.rb +1 -1
- data/spec/moneta/simple_null_spec.rb +1 -1
- data/spec/moneta/simple_pstore_spec.rb +1 -1
- data/spec/moneta/simple_pstore_with_expires_spec.rb +1 -1
- data/spec/moneta/simple_redis_spec.rb +1 -1
- data/spec/moneta/simple_restclient_spec.rb +1 -1
- data/spec/moneta/simple_riak_spec.rb +1 -1
- data/spec/moneta/simple_riak_with_expires_spec.rb +1 -1
- data/spec/moneta/simple_sdbm_spec.rb +1 -1
- data/spec/moneta/simple_sdbm_with_expires_spec.rb +1 -1
- data/spec/moneta/simple_sequel_spec.rb +1 -1
- data/spec/moneta/simple_sequel_with_expires_spec.rb +1 -1
- data/spec/moneta/simple_sqlite_spec.rb +1 -1
- data/spec/moneta/simple_sqlite_with_expires_spec.rb +1 -1
- data/spec/moneta/simple_tdb_spec.rb +1 -1
- data/spec/moneta/simple_tdb_with_expires_spec.rb +1 -1
- data/spec/moneta/simple_tokyocabinet_spec.rb +1 -1
- data/spec/moneta/simple_tokyocabinet_with_expires_spec.rb +1 -1
- data/spec/moneta/simple_yaml_spec.rb +1 -1
- data/spec/moneta/simple_yaml_with_expires_spec.rb +1 -1
- data/spec/moneta/stack_file_memory_spec.rb +2 -2
- data/spec/moneta/stack_memory_file_spec.rb +3 -3
- data/spec/moneta/transformer_bencode_spec.rb +1 -1
- data/spec/moneta/transformer_bert_spec.rb +1 -1
- data/spec/moneta/transformer_bson_spec.rb +1 -1
- data/spec/moneta/transformer_bzip2_spec.rb +1 -1
- data/spec/moneta/transformer_json_spec.rb +1 -1
- data/spec/moneta/transformer_key_marshal_spec.rb +19 -19
- data/spec/moneta/transformer_key_yaml_spec.rb +19 -19
- data/spec/moneta/transformer_lzma_spec.rb +1 -1
- data/spec/moneta/transformer_lzo_spec.rb +1 -1
- data/spec/moneta/transformer_marshal_base64_spec.rb +1 -1
- data/spec/moneta/transformer_marshal_escape_spec.rb +1 -1
- data/spec/moneta/transformer_marshal_hmac_spec.rb +1 -1
- data/spec/moneta/transformer_marshal_md5_spec.rb +1 -1
- data/spec/moneta/transformer_marshal_md5_spread_spec.rb +1 -1
- data/spec/moneta/transformer_marshal_prefix_spec.rb +1 -1
- data/spec/moneta/transformer_marshal_rmd160_spec.rb +1 -1
- data/spec/moneta/transformer_marshal_sha1_spec.rb +1 -1
- data/spec/moneta/transformer_marshal_sha256_spec.rb +1 -1
- data/spec/moneta/transformer_marshal_sha384_spec.rb +1 -1
- data/spec/moneta/transformer_marshal_sha512_spec.rb +1 -1
- data/spec/moneta/transformer_marshal_spec.rb +1 -1
- data/spec/moneta/transformer_marshal_truncate_spec.rb +1 -1
- data/spec/moneta/transformer_marshal_uuencode_spec.rb +1 -1
- data/spec/moneta/transformer_msgpack_spec.rb +1 -1
- data/spec/moneta/transformer_ox_spec.rb +1 -1
- data/spec/moneta/transformer_quicklz_spec.rb +1 -1
- data/spec/moneta/transformer_snappy_spec.rb +1 -1
- data/spec/moneta/transformer_tnet_spec.rb +1 -1
- data/spec/moneta/transformer_value_marshal_spec.rb +1 -1
- data/spec/moneta/transformer_value_yaml_spec.rb +1 -1
- data/spec/moneta/transformer_yaml_spec.rb +1 -1
- data/spec/moneta/transformer_zlib_spec.rb +1 -1
- data/spec/monetaspecs.rb +655 -151
- metadata +8 -6
- data/benchmarks/run.rb +0 -327
- data/script/install-bundle.rb +0 -35
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: moneta
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2013-01-
|
14
|
+
date: 2013-01-06 00:00:00.000000000 Z
|
15
15
|
dependencies: []
|
16
16
|
description: A unified interface to key/value stores
|
17
17
|
email:
|
@@ -34,7 +34,6 @@ files:
|
|
34
34
|
- README.md
|
35
35
|
- Rakefile
|
36
36
|
- SPEC.md
|
37
|
-
- benchmarks/run.rb
|
38
37
|
- lib/action_dispatch/middleware/session/moneta_store.rb
|
39
38
|
- lib/active_support/cache/moneta_store.rb
|
40
39
|
- lib/moneta.rb
|
@@ -92,8 +91,12 @@ files:
|
|
92
91
|
- lib/rack/moneta_store.rb
|
93
92
|
- lib/rack/session/moneta.rb
|
94
93
|
- moneta.gemspec
|
95
|
-
- script/
|
96
|
-
- script/
|
94
|
+
- script/benchmarks
|
95
|
+
- script/generate-specs
|
96
|
+
- script/install-bundle
|
97
|
+
- script/kill-travis
|
98
|
+
- script/start-services
|
99
|
+
- script/upload-bundle
|
97
100
|
- spec/action_dispatch/fixtures/session_autoload_test/foo.rb
|
98
101
|
- spec/action_dispatch/session_moneta_store_spec.rb
|
99
102
|
- spec/active_support/cache_moneta_store_spec.rb
|
@@ -426,4 +429,3 @@ test_files:
|
|
426
429
|
- spec/rack/moneta_cookies_spec.rb
|
427
430
|
- spec/rack/moneta_store_spec.rb
|
428
431
|
- spec/rack/session_moneta_spec.rb
|
429
|
-
has_rdoc:
|
data/benchmarks/run.rb
DELETED
@@ -1,327 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
$: << File.join(File.dirname(__FILE__), '..', 'lib')
|
4
|
-
require 'benchmark'
|
5
|
-
require 'moneta'
|
6
|
-
|
7
|
-
STORES = {
|
8
|
-
# SDBM is unstable
|
9
|
-
# :SDBM => { :file => 'bench.sdbm' },
|
10
|
-
# YAML is so fucking slow
|
11
|
-
# :YAML => { :file => 'bench.yaml' },
|
12
|
-
:ActiveRecord => { :connection => { :adapter => 'sqlite3', :database => ':memory:' } },
|
13
|
-
:Cassandra => {},
|
14
|
-
:Client => {},
|
15
|
-
:Couch => {},
|
16
|
-
:DBM => { :file => 'bench.dbm' },
|
17
|
-
:DataMapper => { :setup => 'sqlite3:bench.datamapper' },
|
18
|
-
:Daybreak => { :file => 'bench.daybreak' },
|
19
|
-
:File => { :dir => 'bench.file' },
|
20
|
-
:GDBM => { :file => 'bench.gdbm' },
|
21
|
-
:HBase => {},
|
22
|
-
:HashFile => { :dir => 'bench.hashfile' },
|
23
|
-
:LRUHash => {},
|
24
|
-
:LevelDB => { :dir => 'bench.leveldb' },
|
25
|
-
:LocalMemCache => { :file => 'bench.lmc' },
|
26
|
-
:MemcachedDalli => {},
|
27
|
-
:MemcachedNative => {},
|
28
|
-
:Memory => {},
|
29
|
-
:Mongo => {},
|
30
|
-
:PStore => { :file => 'bench.pstore' },
|
31
|
-
:Redis => {},
|
32
|
-
:RestClient => { :url => 'http://localhost:8808/' },
|
33
|
-
:Riak => {},
|
34
|
-
:Sequel => { :db => 'sqlite:/' },
|
35
|
-
:Sqlite => { :file => ':memory:' },
|
36
|
-
:TDB => { :file => 'bench.tdb' },
|
37
|
-
}
|
38
|
-
|
39
|
-
CONFIGS = {
|
40
|
-
:uniform_small => {
|
41
|
-
:runs => 3,
|
42
|
-
:keys => 1000,
|
43
|
-
:min_key_length => 1,
|
44
|
-
:max_key_length => 32,
|
45
|
-
:key_dist => :uniform,
|
46
|
-
:min_val_length => 0,
|
47
|
-
:max_val_length => 256,
|
48
|
-
:val_dist => :uniform
|
49
|
-
},
|
50
|
-
:uniform_medium => {
|
51
|
-
:runs => 3,
|
52
|
-
:keys => 100,
|
53
|
-
:min_key_length => 3,
|
54
|
-
:max_key_length => 200,
|
55
|
-
:key_dist => :uniform,
|
56
|
-
:min_val_length => 0,
|
57
|
-
:max_val_length => 1024,
|
58
|
-
:val_dist => :uniform
|
59
|
-
},
|
60
|
-
:uniform_large => {
|
61
|
-
:runs => 3,
|
62
|
-
:keys => 100,
|
63
|
-
:min_key_length => 3,
|
64
|
-
:max_key_length => 200,
|
65
|
-
:key_dist => :uniform,
|
66
|
-
:min_val_length => 0,
|
67
|
-
:max_val_length => 10240,
|
68
|
-
:val_dist => :uniform
|
69
|
-
},
|
70
|
-
:normal_small => {
|
71
|
-
:runs => 3,
|
72
|
-
:keys => 1000,
|
73
|
-
:min_key_length => 1,
|
74
|
-
:max_key_length => 32,
|
75
|
-
:key_dist => :normal,
|
76
|
-
:min_val_length => 0,
|
77
|
-
:max_val_length => 256,
|
78
|
-
:val_dist => :normal
|
79
|
-
},
|
80
|
-
:normal_medium => {
|
81
|
-
:runs => 3,
|
82
|
-
:keys => 100,
|
83
|
-
:min_key_length => 3,
|
84
|
-
:max_key_length => 200,
|
85
|
-
:key_dist => :normal,
|
86
|
-
:min_val_length => 0,
|
87
|
-
:max_val_length => 1024,
|
88
|
-
:val_dist => :normal
|
89
|
-
},
|
90
|
-
:normal_large => {
|
91
|
-
:runs => 3,
|
92
|
-
:keys => 100,
|
93
|
-
:min_key_length => 3,
|
94
|
-
:max_key_length => 200,
|
95
|
-
:key_dist => :normal,
|
96
|
-
:min_val_length => 0,
|
97
|
-
:max_val_length => 10240,
|
98
|
-
:val_dist => :normal
|
99
|
-
},
|
100
|
-
}
|
101
|
-
|
102
|
-
config_name = ARGV.size == 1 ? ARGV.first.to_sym : :uniform_medium
|
103
|
-
unless config = CONFIGS[config_name]
|
104
|
-
puts "Configuration #{config_name} not found"
|
105
|
-
exit
|
106
|
-
end
|
107
|
-
|
108
|
-
DICT = 'ABCDEFGHIJKLNOPQRSTUVWXYZabcdefghijklnopqrstuvwxyz123456789'.freeze
|
109
|
-
|
110
|
-
class String
|
111
|
-
def random(n)
|
112
|
-
(1..n).map { self[rand(size),1] }.join
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
class Array
|
117
|
-
def sum
|
118
|
-
inject(0, &:+)
|
119
|
-
end
|
120
|
-
|
121
|
-
def randomize
|
122
|
-
rest, result = dup, []
|
123
|
-
result << rest.slice!(rand(rest.size)) until result.size == size
|
124
|
-
result
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
Process.fork do
|
129
|
-
begin
|
130
|
-
Moneta::Server.new(Moneta.new(:Memory)).run
|
131
|
-
rescue Exception => ex
|
132
|
-
puts "\e[31mFailed to start Moneta server - #{ex.message}\e[0m"
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
Process.fork do
|
137
|
-
require 'rack'
|
138
|
-
require 'webrick'
|
139
|
-
require 'httpi'
|
140
|
-
require 'rack/moneta_rest'
|
141
|
-
|
142
|
-
# Keep webrick quiet
|
143
|
-
::WEBrick::HTTPServer.class_eval do
|
144
|
-
def access_log(config, req, res); end
|
145
|
-
end
|
146
|
-
::WEBrick::BasicLog.class_eval do
|
147
|
-
def log(level, data); end
|
148
|
-
end
|
149
|
-
|
150
|
-
Rack::Server.start(:app => Rack::Builder.app do
|
151
|
-
use Rack::Lint
|
152
|
-
run Rack::MonetaRest.new(:store => :Memory)
|
153
|
-
end,
|
154
|
-
:environment => :none,
|
155
|
-
:server => :webrick,
|
156
|
-
:Port => 8808)
|
157
|
-
end
|
158
|
-
|
159
|
-
sleep 1 # Wait for servers
|
160
|
-
|
161
|
-
STORES.each do |name, options|
|
162
|
-
begin
|
163
|
-
if name == :DataMapper
|
164
|
-
begin
|
165
|
-
require 'dm-core'
|
166
|
-
DataMapper.setup(:default, :adapter => :in_memory)
|
167
|
-
rescue LoadError => ex
|
168
|
-
puts "\e[31mFailed to load DataMapper - #{ex.message}\e[0m"
|
169
|
-
end
|
170
|
-
elsif name == :Riak
|
171
|
-
require 'riak'
|
172
|
-
Riak.disable_list_keys_warnings = true
|
173
|
-
elsif name == :RestClient
|
174
|
-
require 'httpi'
|
175
|
-
HTTPI.log = false
|
176
|
-
end
|
177
|
-
|
178
|
-
cache = Moneta.new(name, options.dup)
|
179
|
-
cache['test'] = 'test'
|
180
|
-
rescue Exception => ex
|
181
|
-
puts "\e[31m#{name} not benchmarked - #{ex.message}\e[0m"
|
182
|
-
STORES.delete(name)
|
183
|
-
ensure
|
184
|
-
cache.close if cache
|
185
|
-
end
|
186
|
-
end
|
187
|
-
|
188
|
-
HEADER = "\n Minimum Maximum Total Average Ops/s"
|
189
|
-
SEPARATOR = '=' * 68
|
190
|
-
|
191
|
-
puts "\e[1m\e[36m#{SEPARATOR}\n\e[36mConfig #{config_name}\n\e[36m#{SEPARATOR}\e[0m"
|
192
|
-
config.each do |k,v|
|
193
|
-
puts '%-16s = %-10s' % [k,v]
|
194
|
-
end
|
195
|
-
|
196
|
-
module Rand
|
197
|
-
extend self
|
198
|
-
|
199
|
-
def normal_rand(mean, stddev)
|
200
|
-
# Box-Muller transform
|
201
|
-
theta = 2 * Math::PI * (rand(1e10) / 1e10)
|
202
|
-
scale = stddev * Math.sqrt(-2 * Math.log(1 - (rand(1e10) / 1e10)))
|
203
|
-
[mean + scale * Math.cos(theta),
|
204
|
-
mean + scale * Math.sin(theta)]
|
205
|
-
end
|
206
|
-
|
207
|
-
def uniform(min, max)
|
208
|
-
rand(max - min) + min
|
209
|
-
end
|
210
|
-
|
211
|
-
def normal(min, max)
|
212
|
-
mean = (min + max) / 2
|
213
|
-
stddev = (max - min) / 4
|
214
|
-
loop do
|
215
|
-
val = normal_rand(mean, stddev)
|
216
|
-
return val.first if val.first >= min && val.first <= max
|
217
|
-
return val.last if val.last >= min && val.last <= max
|
218
|
-
end
|
219
|
-
end
|
220
|
-
end
|
221
|
-
|
222
|
-
stats, data, summary = {}, {}, []
|
223
|
-
|
224
|
-
until data.size == config[:keys]
|
225
|
-
key = DICT.random(Rand.send(config[:key_dist], config[:min_key_length], config[:max_key_length]))
|
226
|
-
data[key] = DICT.random(Rand.send(config[:val_dist], config[:min_val_length], config[:max_val_length]))
|
227
|
-
end
|
228
|
-
|
229
|
-
key_lengths, val_lengths = data.keys.map(&:size), data.values.map(&:size)
|
230
|
-
data = data.to_a
|
231
|
-
|
232
|
-
def write_histogram(file, sizes)
|
233
|
-
min = sizes.min
|
234
|
-
delta = sizes.max - min
|
235
|
-
histogram = []
|
236
|
-
sizes.each do |s|
|
237
|
-
s = 10 * (s - min) / delta
|
238
|
-
histogram[s] ||= 0
|
239
|
-
histogram[s] += 1
|
240
|
-
end
|
241
|
-
File.open(file, 'w') do |f|
|
242
|
-
histogram.each_with_index { |n,i| f.puts "#{i*delta/10+min} #{n}" }
|
243
|
-
end
|
244
|
-
end
|
245
|
-
|
246
|
-
write_histogram('key.histogram', key_lengths)
|
247
|
-
write_histogram('value.histogram', val_lengths)
|
248
|
-
|
249
|
-
puts "\n\e[1m\e[34m#{SEPARATOR}\n\e[34mComputing keys and values...\n\e[34m#{SEPARATOR}\e[0m"
|
250
|
-
puts %{ Minimum Maximum Total Average}
|
251
|
-
puts 'Key Length % 8d % 8d % 8d % 8d ' % [key_lengths.min, key_lengths.max, key_lengths.sum, key_lengths.sum / data.size]
|
252
|
-
puts 'Value Length % 8d % 8d % 8d % 8d ' % [val_lengths.min, val_lengths.max, val_lengths.sum, val_lengths.sum / data.size]
|
253
|
-
|
254
|
-
STORES.each do |name, options|
|
255
|
-
begin
|
256
|
-
puts "\n\e[1m\e[34m#{SEPARATOR}\n\e[34m#{name}\n\e[34m#{SEPARATOR}\e[0m"
|
257
|
-
|
258
|
-
cache = Moneta.new(name, options.dup)
|
259
|
-
|
260
|
-
stats[name] = {
|
261
|
-
:write => [],
|
262
|
-
:read => [],
|
263
|
-
:sum => [],
|
264
|
-
:error => []
|
265
|
-
}
|
266
|
-
|
267
|
-
%w(Rehearse Measure).each do |type|
|
268
|
-
state = ''
|
269
|
-
print "%s [%#{2 * config[:runs]}s] " % [type, state]
|
270
|
-
|
271
|
-
config[:runs].times do |run|
|
272
|
-
cache.clear
|
273
|
-
print "%s[%-#{2 * config[:runs]}s] " % ["\b" * (2 * config[:runs] + 3), state << 'W']
|
274
|
-
|
275
|
-
data = data.randomize
|
276
|
-
m1 = Benchmark.measure do
|
277
|
-
data.each {|k,v| cache[k] = v }
|
278
|
-
end
|
279
|
-
|
280
|
-
print "%s[%-#{2 * config[:runs]}s] " % ["\b" * (2 * config[:runs] + 3), state << 'R']
|
281
|
-
|
282
|
-
data = data.randomize
|
283
|
-
error = 0
|
284
|
-
m2 = Benchmark.measure do
|
285
|
-
data.each do |k, v|
|
286
|
-
error += 1 if v != cache[k]
|
287
|
-
end
|
288
|
-
end
|
289
|
-
|
290
|
-
if type == 'Measure'
|
291
|
-
stats[name][:write] << m1.real
|
292
|
-
stats[name][:error] << error
|
293
|
-
stats[name][:read] << m2.real
|
294
|
-
stats[name][:sum] << (m1.real + m2.real)
|
295
|
-
end
|
296
|
-
end
|
297
|
-
end
|
298
|
-
|
299
|
-
puts HEADER
|
300
|
-
[:write, :read, :sum].each do |i|
|
301
|
-
total = stats[name][i].sum
|
302
|
-
ops = (config[:runs] * data.size) / total
|
303
|
-
line = '%-17.17s %-5s % 8d % 8d % 8d % 8d % 8d' %
|
304
|
-
[name, i, stats[name][i].min * 1000, stats[name][i].max * 1000,
|
305
|
-
total * 1000, total * 1000 / config[:runs], ops]
|
306
|
-
summary << [-ops, line << "\n"] if i == :sum
|
307
|
-
puts line
|
308
|
-
end
|
309
|
-
|
310
|
-
errors = stats[name][:error].sum
|
311
|
-
if errors > 0
|
312
|
-
puts "\e[31m%-23.23s % 8d % 8d % 8d % 8d\e[0m" %
|
313
|
-
['Read errors', stats[name][:error].min, stats[name][:error].max, errors, errors / config[:runs]]
|
314
|
-
else
|
315
|
-
puts "\e[32mNo read errors"
|
316
|
-
end
|
317
|
-
rescue StandardError => ex
|
318
|
-
puts "\n\e[31mFailed to benchmark #{name} - #{ex.message}\e[0m\n"
|
319
|
-
ensure
|
320
|
-
cache.close if cache
|
321
|
-
end
|
322
|
-
end
|
323
|
-
|
324
|
-
puts "\n\e[1m\e[36m#{SEPARATOR}\n\e[36mSummary #{config_name}: #{config[:runs]} runs, #{data.size} keys\n\e[36m#{SEPARATOR}\e[0m#{HEADER}\n"
|
325
|
-
summary.sort_by(&:first).each do |entry|
|
326
|
-
puts entry.last
|
327
|
-
end
|
data/script/install-bundle.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# Inspired by https://coderwall.com/p/x8exja
|
3
|
-
|
4
|
-
def cmd(s)
|
5
|
-
puts s
|
6
|
-
system(s)
|
7
|
-
end
|
8
|
-
|
9
|
-
def cmd!(s)
|
10
|
-
cmd(s) || abort("#{s} failed")
|
11
|
-
end
|
12
|
-
|
13
|
-
BUNDLE_FILE = "bundle-#{RUBY_VERSION}-#{defined?(JRUBY_VERSION) ? 'jruby' : 'mri'}.tar.gz"
|
14
|
-
|
15
|
-
if cmd("wget -O #{BUNDLE_FILE} http://s3.amazonaws.com/minad-moneta/#{BUNDLE_FILE}")
|
16
|
-
cmd! 'rm -rf .bundle'
|
17
|
-
cmd! "tar -xf #{BUNDLE_FILE}"
|
18
|
-
cmd! 'bundle install --path .bundle'
|
19
|
-
else
|
20
|
-
$: << File.expand_path(File.join(__FILE__, '..', '..', 'lib'))
|
21
|
-
|
22
|
-
cmd! 'gem install --no-rdoc --no-ri fog'
|
23
|
-
require 'rubygems'
|
24
|
-
require 'fog'
|
25
|
-
require 'moneta'
|
26
|
-
|
27
|
-
store = Moneta::Adapters::Fog.new(:provider => 'AWS',
|
28
|
-
:aws_access_key_id => ENV['AWS_KEY_ID'],
|
29
|
-
:aws_secret_access_key => ENV['AWS_ACCESS_KEY'],
|
30
|
-
:dir => 'minad-moneta')
|
31
|
-
|
32
|
-
cmd! 'bundle install --path .bundle'
|
33
|
-
cmd! "tar -czf #{BUNDLE_FILE} .bundle"
|
34
|
-
store.store(BUNDLE_FILE, File.read(BUNDLE_FILE), :public => true)
|
35
|
-
end
|