Skip to content

Commit d845eeb

Browse files
committed
remove open struct
1 parent 90e7d5a commit d845eeb

File tree

4 files changed

+45
-17
lines changed

4 files changed

+45
-17
lines changed

Gemfile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ source 'https://rubygems.org'
44

55
git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
66

7-
gem 'ostruct', '~> 0.5.5'
87
gem 'zlib', '~> 3.0'
98

109
group :development, :test do

Gemfile.lock

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ GEM
1212
i18n (1.12.0)
1313
concurrent-ruby (~> 1.0)
1414
json (2.6.3)
15-
ostruct (0.5.5)
1615
parallel (1.22.1)
1716
parser (3.1.3.0)
1817
ast (~> 2.4.1)
@@ -66,7 +65,6 @@ DEPENDENCIES
6665
benchmark-ips (~> 2.10)
6766
byebug (~> 11.1)
6867
faker (~> 3.1)
69-
ostruct (~> 0.5.5)
7068
rspec (~> 3.12)
7169
rubocop (~> 1.41)
7270
rubocop-rspec (~> 2.16)

README.md

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -82,16 +82,47 @@ bundle exec rspec
8282

8383
```ruby
8484
ruby benchmark.rb
85-
Benchmarked with value_size of 69 bytes
85+
Benchmarked with value_size of 61 bytes
8686
user system total real
87-
DiskStore.put : 10k records 0.131023 0.070932 0.201955 ( 0.202188) s
88-
DiskStore.get : 10k records 0.039780 0.033775 0.073555 ( 0.073595) s
89-
DiskStore.put : 100k records 2.287855 0.824356 3.112211 ( 3.116531) s
90-
DiskStore.get : 100k records 0.831596 0.371778 1.203374 ( 1.204517) s
91-
DiskStore.put : 1M records 46.158727 62.157752 108.316479 (111.450463) s
92-
DiskStore.get : 1M records 10.434109 48.766160 59.200269 ( 68.947144) s
93-
avg_put: 0.000044 0.000057 0.000101 ( 0.000103) s
94-
avg_get: 0.000010 0.000044 0.000054 ( 0.000063) s
87+
DiskStore.put : 10k records 0.027083 0.018129 0.045212 ( 0.045279)
88+
DiskStore.get : 10k records 0.030118 0.008643 0.038761 ( 0.038883)
89+
DiskStore.put : 100k records 0.375524 0.185587 0.561111 ( 0.563386)
90+
DiskStore.get : 100k records 0.322530 0.098692 0.421222 ( 0.422358)
91+
DiskStore.put : 1M records 4.616699 2.148791 6.765490 ( 6.807430)
92+
DiskStore.get : 1M records 3.629900 1.075376 4.705276 ( 4.715082)
93+
avg_put: 0.000005 0.000002 0.000007 ( 0.000007)
94+
avg_get: 0.000004 0.000001 0.000005 ( 0.000005)
95+
```
96+
97+
### Iterations Per Second
98+
99+
```ruby
100+
Warming up --------------------------------------
101+
DiskStore.put : 100 records with data size: 674 Bytes
102+
146.000 i/100ms
103+
DiskStore.get : 100 records, value size: 674 Bytes
104+
2.246k i/100ms
105+
DiskStore.put : 100 records, value size: 6 Kb
106+
19.000 i/100ms
107+
DiskStore.get : 100 records, value size: 6 Kb
108+
2.066k i/100ms
109+
DiskStore.put : 100 records, value size: 660 Kb
110+
1.000 i/100ms
111+
DiskStore.get : 100 records, value size: 660 Kb
112+
143.000 i/100ms
113+
Calculating -------------------------------------
114+
DiskStore.put : 100 records with data size: 674 Bytes
115+
1.522k (±17.1%) i/s - 7.300k in 5.048182s
116+
DiskStore.get : 100 records, value size: 674 Bytes
117+
23.946k (± 5.5%) i/s - 121.284k in 5.079779s
118+
DiskStore.put : 100 records, value size: 6 Kb
119+
689.42853.2%) i/s - 1.729k in 5.240029s
120+
DiskStore.get : 100 records, value size: 6 Kb
121+
20.806k (± 5.6%) i/s - 105.366k in 5.079364s
122+
DiskStore.put : 100 records, value size: 660 Kb
123+
4.4190.0%) i/s - 23.000 in 5.207703s
124+
DiskStore.get : 100 records, value size: 660 Kb
125+
3.411k (±40.8%) i/s - 8.437k in 5.245820s
95126
```
96127

97128
### Iterations Per Second

lib/bitcask/disk_store.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,16 @@ def []=(key, value)
3030
end
3131

3232
# Get the value for the given key
33-
# When the key does not exist, it returns empty string
33+
# When the key does not exist, it returns empty string
3434
#
3535
# @param [String] key
3636
# @return [Value] value of the given key
3737
def get(key)
3838
key_struct = @key_dir[key]
3939
return '' if key_struct.nil?
4040

41-
@db_fh.seek(key_struct.write_pos)
42-
raw = @db_fh.read(key_struct.log_size)
41+
@db_fh.seek(key_struct[:write_pos])
42+
raw = @db_fh.read(key_struct[:log_size])
4343
epoc, key, value = deserialize(raw)
4444

4545
value
@@ -88,7 +88,7 @@ def incr_write_pos(pos)
8888
end
8989

9090
def key_struct(write_pos, log_size, key)
91-
OpenStruct.new(write_pos: write_pos, log_size: log_size, key: key)
91+
{ write_pos: write_pos, log_size: log_size, key: key }
9292
end
9393

9494
def init_key_dir
@@ -108,7 +108,7 @@ def init_key_dir
108108
header_bytes + key_bytes + value_bytes)
109109

110110
log_size = crc32_header_offset + keysz + valuesz
111-
@key_dir[key] = OpenStruct.new(write_pos: @write_pos, log_size: log_size, key: key)
111+
@key_dir[key] = key_struct( @write_pos, log_size, key)
112112
incr_write_pos(log_size)
113113
end
114114
end

0 commit comments

Comments
 (0)