-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathbdb.rb
63 lines (47 loc) · 1.16 KB
/
bdb.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/usr/bin/env ruby
require File.dirname(__FILE__) + '/common'
require 'bdb'
require 'json'
# env = BDB::Env.open(File.dirname(__FILE__) + '/data',
# BDB::INIT_MPOOL | BDB::CREATE)
bdb = BDB::Btree.open("data/day.bdb",
nil,
BDB::CREATE | BDB::TRUNCATE,
"set_flags" => BDB::DUP)
cursor = bdb.cursor
Benchmark.bm do |x, logger|
symbols = Set.new
x.report("write:") do
i = 0
QuoteDay.each do |ohlc|
break if i == MAX_RECORDS
symbol = ohlc.delete("symbol")
cursor.put(BDB::KEYFIRST, symbol, ohlc.to_json)
i += 1
symbols.add(symbol)
end
# bdb.sync
end
x.report("index:") do
# no index needed
end
x.report("q30:") do
symbols.each do |s|
i = 0
records = []
bdb.each_dup(s, 30) do |key, value|
records.push(JSON.parse(value))
break if i += 1 and i == 30
end
end
end
x.report("qall:") do
symbols.each do |s|
records = bdb.duplicates(s, false).map do |value|
JSON.parse(value)
end
end
end
logger << sprintf(",%d", bdb.size)
end
bdb.close