decaying_bloomfilter 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +11 -0
- data/Rakefile +14 -0
- data/VERSION +1 -0
- data/lib/decaying_bloomfilter.rb +45 -0
- metadata +65 -0
data/README.rdoc
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
= Time Decaying Bloom Filter
|
2
|
+
|
3
|
+
Much like a bloom-filter except keys inserted decay over-time.
|
4
|
+
|
5
|
+
== Usage
|
6
|
+
|
7
|
+
The configuration is identical to http://github.com/igrigorik/bloomfilter except you have two extra options, time and count. The TTL of any given key is time * count.
|
8
|
+
|
9
|
+
== There is much more to say!
|
10
|
+
|
11
|
+
But this is version 0.0.1. I'll write more about it later. (And commit some tests and what not.)
|
data/Rakefile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
begin
|
2
|
+
require 'jeweler'
|
3
|
+
Jeweler::Tasks.new do |s|
|
4
|
+
s.name = "decaying_bloomfilter"
|
5
|
+
s.description = s.summary = "Time Decaying Bloom Filter - Much like a bloom-filter except keys inserted decay over-time."
|
6
|
+
s.email = "joshbuddy@gmail.com"
|
7
|
+
s.homepage = "http://github.com/joshbuddy/decaying_bloomfilter"
|
8
|
+
s.authors = ["Joshua Hull"]
|
9
|
+
s.files = FileList["[A-Z]*", "{lib,spec}/**/*"]
|
10
|
+
end
|
11
|
+
Jeweler::GemcutterTasks.new
|
12
|
+
rescue LoadError
|
13
|
+
puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
|
14
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.1
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'bloomfilter'
|
2
|
+
require 'thread'
|
3
|
+
|
4
|
+
class DecayingBloomFilter
|
5
|
+
|
6
|
+
attr_accessor :index, :time
|
7
|
+
|
8
|
+
def initialize(opts)
|
9
|
+
count = opts.delete(:count)
|
10
|
+
@time = opts.delete(:time)
|
11
|
+
@master = BloomFilter.new(opts)
|
12
|
+
@index = 0
|
13
|
+
@filters = []
|
14
|
+
@mutex = Mutex.new
|
15
|
+
count.times {@filters << BloomFilter.new(opts)}
|
16
|
+
Updater.new(self)
|
17
|
+
end
|
18
|
+
|
19
|
+
def update_master
|
20
|
+
@mutex.synchronize {
|
21
|
+
@master.clear
|
22
|
+
@filters.each_with_index {|bf, i| @master.merge!(bf)}
|
23
|
+
@index = (@index + 1) % @filters.size
|
24
|
+
@filters[@index].clear
|
25
|
+
}
|
26
|
+
end
|
27
|
+
|
28
|
+
def method_missing(method, *args, &block)
|
29
|
+
@mutex.synchronize {
|
30
|
+
@filters[@index].send(method, *args, &block)
|
31
|
+
@master.send(method, *args, &block)
|
32
|
+
}
|
33
|
+
end
|
34
|
+
|
35
|
+
class Updater
|
36
|
+
def initialize(bf)
|
37
|
+
::Thread.new(bf) do |bf|
|
38
|
+
loop do
|
39
|
+
bf.update_master
|
40
|
+
sleep(bf.time)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
metadata
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: decaying_bloomfilter
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
version: 0.0.1
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Joshua Hull
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-05-22 00:00:00 -04:00
|
18
|
+
default_executable:
|
19
|
+
dependencies: []
|
20
|
+
|
21
|
+
description: Time Decaying Bloom Filter - Much like a bloom-filter except keys inserted decay over-time.
|
22
|
+
email: joshbuddy@gmail.com
|
23
|
+
executables: []
|
24
|
+
|
25
|
+
extensions: []
|
26
|
+
|
27
|
+
extra_rdoc_files:
|
28
|
+
- README.rdoc
|
29
|
+
files:
|
30
|
+
- README.rdoc
|
31
|
+
- Rakefile
|
32
|
+
- VERSION
|
33
|
+
- lib/decaying_bloomfilter.rb
|
34
|
+
has_rdoc: true
|
35
|
+
homepage: http://github.com/joshbuddy/decaying_bloomfilter
|
36
|
+
licenses: []
|
37
|
+
|
38
|
+
post_install_message:
|
39
|
+
rdoc_options:
|
40
|
+
- --charset=UTF-8
|
41
|
+
require_paths:
|
42
|
+
- lib
|
43
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
segments:
|
48
|
+
- 0
|
49
|
+
version: "0"
|
50
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
segments:
|
55
|
+
- 0
|
56
|
+
version: "0"
|
57
|
+
requirements: []
|
58
|
+
|
59
|
+
rubyforge_project:
|
60
|
+
rubygems_version: 1.3.6
|
61
|
+
signing_key:
|
62
|
+
specification_version: 3
|
63
|
+
summary: Time Decaying Bloom Filter - Much like a bloom-filter except keys inserted decay over-time.
|
64
|
+
test_files: []
|
65
|
+
|