daybreak 0.2.4 → 0.3.0
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/.travis.yml +1 -0
- data/README +1 -1
- data/lib/daybreak/db.rb +2 -2
- data/lib/daybreak/format.rb +16 -6
- data/lib/daybreak/journal.rb +1 -4
- data/lib/daybreak/version.rb +1 -1
- data/script/bench +8 -0
- data/test/mock.db-test +0 -0
- data/test/test.rb +7 -0
- metadata +17 -15
    
        data/.travis.yml
    CHANGED
    
    
    
        data/README
    CHANGED
    
    | @@ -5,7 +5,7 @@ | |
| 5 5 |  | 
| 6 6 | 
             
            Daybreak is a simple key value store for ruby. It has user defined persistence,
         | 
| 7 7 | 
             
            and all data is stored in a table in memory so ruby niceties are available.
         | 
| 8 | 
            -
            Daybreak is faster than  | 
| 8 | 
            +
            Daybreak is faster than other ruby options like pstore or dbm.
         | 
| 9 9 |  | 
| 10 10 | 
             
            $ gem install daybreak
         | 
| 11 11 |  | 
    
        data/lib/daybreak/db.rb
    CHANGED
    
    | @@ -20,7 +20,7 @@ module Daybreak | |
| 20 20 | 
             
                # @yieldparam [String] key the key to be stored.
         | 
| 21 21 | 
             
                def initialize(file, options = {}, &block)
         | 
| 22 22 | 
             
                  @serializer = (options[:serializer] || Serializer::Default).new
         | 
| 23 | 
            -
                  @table = Hash.new | 
| 23 | 
            +
                  @table = Hash.new(&method(:hash_default))
         | 
| 24 24 | 
             
                  @journal = Journal.new(file, (options[:format] || Format).new, @serializer) do |record|
         | 
| 25 25 | 
             
                    if !record
         | 
| 26 26 | 
             
                      @table.clear
         | 
| @@ -201,7 +201,7 @@ module Daybreak | |
| 201 201 | 
             
                # @yieldparam [DB] db
         | 
| 202 202 | 
             
                # @return result of the block
         | 
| 203 203 | 
             
                def lock
         | 
| 204 | 
            -
                   | 
| 204 | 
            +
                  synchronize { @journal.lock { yield self } }
         | 
| 205 205 | 
             
                end
         | 
| 206 206 |  | 
| 207 207 | 
             
                # Synchronize access to the database from multiple threads
         | 
    
        data/lib/daybreak/format.rb
    CHANGED
    
    | @@ -32,14 +32,24 @@ module Daybreak | |
| 32 32 | 
             
                  data << crc32(data)
         | 
| 33 33 | 
             
                end
         | 
| 34 34 |  | 
| 35 | 
            -
                # Deserialize  | 
| 35 | 
            +
                # Deserialize records from buffer, and yield them.
         | 
| 36 36 | 
             
                # @param [String] buf the buffer to read from
         | 
| 37 | 
            -
                # @ | 
| 37 | 
            +
                # @yield [Array] blk deserialized record [key, value] or [key] if the record is deleted
         | 
| 38 | 
            +
                # @return [Fixnum] number of records
         | 
| 38 39 | 
             
                def parse(buf)
         | 
| 39 | 
            -
                   | 
| 40 | 
            -
                   | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 40 | 
            +
                  n, count = 0, 0
         | 
| 41 | 
            +
                  while n < buf.size
         | 
| 42 | 
            +
                    key_size, value_size = buf[n, 8].unpack('NN')
         | 
| 43 | 
            +
                    data_size = key_size + 8
         | 
| 44 | 
            +
                    data_size += value_size if value_size != DELETE
         | 
| 45 | 
            +
                    data = buf[n, data_size]
         | 
| 46 | 
            +
                    n += data_size
         | 
| 47 | 
            +
                    raise 'CRC mismatch: your data might be corrupted!' unless buf[n, 4] == crc32(data)
         | 
| 48 | 
            +
                    n += 4
         | 
| 49 | 
            +
                    yield(value_size == DELETE ? [data[8, key_size]] : [data[8, key_size], data[8 + key_size, value_size]])
         | 
| 50 | 
            +
                    count += 1
         | 
| 51 | 
            +
                  end
         | 
| 52 | 
            +
                  count
         | 
| 43 53 | 
             
                end
         | 
| 44 54 |  | 
| 45 55 | 
             
                protected
         | 
    
        data/lib/daybreak/journal.rb
    CHANGED
    
    
    
        data/lib/daybreak/version.rb
    CHANGED
    
    
    
        data/script/bench
    CHANGED
    
    | @@ -106,3 +106,11 @@ db = Daybreak::DB.new DB_PATH | |
| 106 106 | 
             
            run db, 'bulk updates, synced' do
         | 
| 107 107 | 
             
              db.update! hash
         | 
| 108 108 | 
             
            end
         | 
| 109 | 
            +
             | 
| 110 | 
            +
            # reads
         | 
| 111 | 
            +
            puts "Read performance"
         | 
| 112 | 
            +
            db = Daybreak::DB.new DB_PATH
         | 
| 113 | 
            +
            DATA.each {|i| db[i] = i }
         | 
| 114 | 
            +
            report RUNS.times.map { Benchmark.measure { db1 = Daybreak::DB.new DB_PATH; db1.close }.real * 1000 }
         | 
| 115 | 
            +
            db.clear
         | 
| 116 | 
            +
            db.close
         | 
    
        data/test/mock.db-test
    ADDED
    
    | Binary file | 
    
        data/test/test.rb
    CHANGED
    
    | @@ -404,6 +404,13 @@ describe Daybreak::DB do | |
| 404 404 | 
             
                db.close
         | 
| 405 405 | 
             
              end
         | 
| 406 406 |  | 
| 407 | 
            +
              it 'should keep the same format' do
         | 
| 408 | 
            +
                db = Daybreak::DB.new DB_PATH, :serializer => Daybreak::Serializer::None
         | 
| 409 | 
            +
                10.times {|i| db[i.to_s] = i.to_s }
         | 
| 410 | 
            +
                db.close
         | 
| 411 | 
            +
                assert_equal File.read(DB_PATH), File.read(File.join(HERE, 'mock.db-test'))
         | 
| 412 | 
            +
              end
         | 
| 413 | 
            +
             | 
| 407 414 | 
             
              after do
         | 
| 408 415 | 
             
                @db.clear
         | 
| 409 416 | 
             
                @db.close
         | 
    
        metadata
    CHANGED
    
    | @@ -1,8 +1,8 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: daybreak
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 0.3.0
         | 
| 4 5 | 
             
              prerelease: 
         | 
| 5 | 
            -
              version: 0.2.4
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| 8 8 | 
             
            - Jeff Larson
         | 
| @@ -10,40 +10,40 @@ authors: | |
| 10 10 | 
             
            autorequire: 
         | 
| 11 11 | 
             
            bindir: bin
         | 
| 12 12 | 
             
            cert_chain: []
         | 
| 13 | 
            -
            date: 2013- | 
| 13 | 
            +
            date: 2013-03-13 00:00:00.000000000 Z
         | 
| 14 14 | 
             
            dependencies:
         | 
| 15 15 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 16 | 
            -
               | 
| 16 | 
            +
              name: rake
         | 
| 17 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 18 | 
            +
                none: false
         | 
| 17 19 | 
             
                requirements:
         | 
| 18 20 | 
             
                - - ! '>='
         | 
| 19 21 | 
             
                  - !ruby/object:Gem::Version
         | 
| 20 22 | 
             
                    version: '0'
         | 
| 21 | 
            -
                none: false
         | 
| 22 | 
            -
              name: rake
         | 
| 23 23 | 
             
              type: :development
         | 
| 24 24 | 
             
              prerelease: false
         | 
| 25 | 
            -
               | 
| 25 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 26 | 
            +
                none: false
         | 
| 26 27 | 
             
                requirements:
         | 
| 27 28 | 
             
                - - ! '>='
         | 
| 28 29 | 
             
                  - !ruby/object:Gem::Version
         | 
| 29 30 | 
             
                    version: '0'
         | 
| 30 | 
            -
                none: false
         | 
| 31 31 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 32 | 
            -
               | 
| 32 | 
            +
              name: minitest
         | 
| 33 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 34 | 
            +
                none: false
         | 
| 33 35 | 
             
                requirements:
         | 
| 34 36 | 
             
                - - ! '>='
         | 
| 35 37 | 
             
                  - !ruby/object:Gem::Version
         | 
| 36 38 | 
             
                    version: '0'
         | 
| 37 | 
            -
                none: false
         | 
| 38 | 
            -
              name: minitest
         | 
| 39 39 | 
             
              type: :development
         | 
| 40 40 | 
             
              prerelease: false
         | 
| 41 | 
            -
               | 
| 41 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 42 | 
            +
                none: false
         | 
| 42 43 | 
             
                requirements:
         | 
| 43 44 | 
             
                - - ! '>='
         | 
| 44 45 | 
             
                  - !ruby/object:Gem::Version
         | 
| 45 46 | 
             
                    version: '0'
         | 
| 46 | 
            -
                none: false
         | 
| 47 47 | 
             
            description: Incredibly fast pure-ruby key-value store
         | 
| 48 48 | 
             
            email:
         | 
| 49 49 | 
             
            - thejefflarson@gmail.com
         | 
| @@ -72,6 +72,7 @@ files: | |
| 72 72 | 
             
            - lib/daybreak/version.rb
         | 
| 73 73 | 
             
            - script/bench
         | 
| 74 74 | 
             
            - script/converter
         | 
| 75 | 
            +
            - test/mock.db-test
         | 
| 75 76 | 
             
            - test/prof.rb
         | 
| 76 77 | 
             
            - test/test.rb
         | 
| 77 78 | 
             
            - test/test_helper.rb
         | 
| @@ -83,25 +84,26 @@ rdoc_options: [] | |
| 83 84 | 
             
            require_paths:
         | 
| 84 85 | 
             
            - lib
         | 
| 85 86 | 
             
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 87 | 
            +
              none: false
         | 
| 86 88 | 
             
              requirements:
         | 
| 87 89 | 
             
              - - ! '>='
         | 
| 88 90 | 
             
                - !ruby/object:Gem::Version
         | 
| 89 91 | 
             
                  version: '0'
         | 
| 90 | 
            -
              none: false
         | 
| 91 92 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 93 | 
            +
              none: false
         | 
| 92 94 | 
             
              requirements:
         | 
| 93 95 | 
             
              - - ! '>='
         | 
| 94 96 | 
             
                - !ruby/object:Gem::Version
         | 
| 95 97 | 
             
                  version: '0'
         | 
| 96 | 
            -
              none: false
         | 
| 97 98 | 
             
            requirements: []
         | 
| 98 99 | 
             
            rubyforge_project: 
         | 
| 99 | 
            -
            rubygems_version: 1.8. | 
| 100 | 
            +
            rubygems_version: 1.8.24
         | 
| 100 101 | 
             
            signing_key: 
         | 
| 101 102 | 
             
            specification_version: 3
         | 
| 102 103 | 
             
            summary: Daybreak provides an incredibly fast pure-ruby in memory key-value store,
         | 
| 103 104 | 
             
              which is multi-process safe and uses a journal log to store the data.
         | 
| 104 105 | 
             
            test_files:
         | 
| 106 | 
            +
            - test/mock.db-test
         | 
| 105 107 | 
             
            - test/prof.rb
         | 
| 106 108 | 
             
            - test/test.rb
         | 
| 107 109 | 
             
            - test/test_helper.rb
         |