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.
Files changed (5) hide show
  1. data/README.rdoc +11 -0
  2. data/Rakefile +14 -0
  3. data/VERSION +1 -0
  4. data/lib/decaying_bloomfilter.rb +45 -0
  5. metadata +65 -0
@@ -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.)
@@ -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
+