mongoid_auto_increment_id 0.6.5 → 0.7.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9838a8e9fa6948839fb6955fbe07de1c8f1ecd8d
4
- data.tar.gz: d05110d3c88b26ee9d65b720cc11b12d4f4a68b7
3
+ metadata.gz: 8e2c38dec21ef0b5b1e74421e2c52c365e361414
4
+ data.tar.gz: 63af6a893e7d8e26b96e87f14f21425dc465d7e6
5
5
  SHA512:
6
- metadata.gz: c7122409c656ef8bd8e017410b97f28e261ef571e2e136d9fc96aa5ca96e2a890bec62684c3928912b733792c2b0e8443de7690ce5ae7f3d05a356a94e64dce6
7
- data.tar.gz: 04d3a42419a62788c441bab05780703219726ec5f96338c9f50384ce1e5cc62060a0d76effc9af4539cb6c49def71e39eee6ac6df4e55e00e7924b42d8b1edd9
6
+ metadata.gz: 93324b2c58cf12bd2cc1875453cb22a7c6d181a4febf24f367f32ff8d7d30b604e0cf5eaa73bff36d972e588cea1e279e49ea7c5be151ad1d85a7b9f5aefcc64
7
+ data.tar.gz: 0bede2413f1bb5836e10718d6e4ab902f17f00e531151a198a9f64253a8f7fb83c228b22834dcbb00cbdc6288e2282eceaeda52b5e00d16ac64009b9931c4f7c
data/README.md CHANGED
@@ -17,9 +17,25 @@ gem 'mongoid_auto_increment_id', "0.6.1"
17
17
  gem 'mongoid_auto_increment_id', "0.6.2"
18
18
 
19
19
  # Mongoid 4.0.0+
20
- gem 'mongoid_auto_increment_id', "0.6.5"
20
+ gem 'mongoid_auto_increment_id', "0.7.0"
21
21
  ```
22
22
 
23
+ ## Configure
24
+
25
+ If you want use sequence cache to reduce MongoDB write, you can enable cache:
26
+
27
+ config/initializes/mongoid_auto_increment_id.rb
28
+
29
+ ```ruby
30
+ Mongoid::AutoIncrementId.cache_store = ActiveSupport::Cache.lookup_store(:memcache_store, "127.0.0.1")
31
+ # First call will generate 200 ids and caching in cache_store
32
+ # Then the next 199 ids will return from cache_store
33
+ # Until 200 ids used, it will generate next 200 ids again.
34
+ Mongoid::AutoIncrementId.seq_cache_size = 200
35
+ ```
36
+
37
+ > NOTICE! mongoid_auto_increment_id is very fast in default config, you may not need enable that, if you project not need insert huge rows in a moment.
38
+
23
39
  ## USAGE
24
40
 
25
41
  ```ruby
@@ -0,0 +1,28 @@
1
+ module Mongoid
2
+ module AutoIncrementId
3
+ @seq_cache_size = 1
4
+ @cache_store = ActiveSupport::Cache::MemoryStore.new
5
+
6
+ class << self
7
+ # How many ids generate in once call, and it will cache ids in Memroy, to reduce MongoDB write
8
+ # default: 1
9
+ #
10
+ # [Call first] -> [occupancy N and Write MongoDB] -> [Save N ids in Memory variable `aii_cache`]
11
+ # [Next call] -> [Shift aii_cache and return]
12
+ # .....
13
+ # [N+1 call] -> [occupancy N and Write MongoDB] -> [Save N ids in Memory variable `aii_cache`]
14
+ attr_accessor :seq_cache_size
15
+
16
+ # ActiveSupport::Cache::Store
17
+ # default: ActiveSupport::Cache.lookup_store(:memory_store)
18
+ #
19
+ # Mongoid::AutoIncrementId.cache_store = ActiveSupport::Cache.lookup_store(:memcache_store, "127.0.0.1")
20
+ # For cache ids
21
+ attr_accessor :cache_store
22
+
23
+ def cache_enabled?
24
+ self.seq_cache_size > 1
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,7 +1,18 @@
1
+ require "mongoid/auto_increment_id/config"
2
+
1
3
  module Mongoid
2
4
  class Identity
3
5
  # Generate auto increment id
6
+ # params:
4
7
  def self.generate_id(document)
8
+ cache_key = self.maii_cache_key(document)
9
+ if Mongoid::AutoIncrementId.cache_enabled?
10
+ if ids = Mongoid::AutoIncrementId.cache_store.read(cache_key)
11
+ cached_id = self.shift_id(ids, cache_key)
12
+ return cached_id if !cached_id.blank?
13
+ end
14
+ end
15
+
5
16
  database_name = Mongoid::Sessions.default.send(:current_database).name
6
17
 
7
18
  o = nil
@@ -9,12 +20,32 @@ module Mongoid
9
20
  o = node.command(database_name,
10
21
  {"findAndModify" => "mongoid.auto_increment_ids",
11
22
  :query => { :_id => document.collection_name },
12
- :update => { "$inc" => { :c => 1 }},
23
+ :update => { "$inc" => { :c => Mongoid::AutoIncrementId.seq_cache_size }},
13
24
  :upsert => true,
14
25
  :new => true }, {})
15
26
  end
16
-
17
- o["value"]["c"].to_i
27
+
28
+ last_seq = o["value"]["c"].to_i
29
+
30
+ if Mongoid::AutoIncrementId.cache_enabled?
31
+ ids = ((last_seq - Mongoid::AutoIncrementId.seq_cache_size) + 1 .. last_seq).to_a
32
+ self.shift_id(ids, cache_key)
33
+ else
34
+ last_seq
35
+ end
36
+ end
37
+
38
+
39
+ private
40
+ def self.shift_id(ids, cache_key)
41
+ return nil if ids.blank?
42
+ first_id = ids.shift
43
+ Mongoid::AutoIncrementId.cache_store.write(cache_key, ids)
44
+ first_id
45
+ end
46
+
47
+ def self.maii_cache_key(document)
48
+ "maii-seqs-#{document.collection_name}"
18
49
  end
19
50
  end
20
51
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid_auto_increment_id
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.5
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Lee
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-04 00:00:00.000000000 Z
11
+ date: 2015-03-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mongoid
@@ -38,6 +38,7 @@ extensions: []
38
38
  extra_rdoc_files: []
39
39
  files:
40
40
  - README.md
41
+ - lib/mongoid/auto_increment_id/config.rb
41
42
  - lib/mongoid_auto_increment_id.rb
42
43
  homepage: https://github.com/huacnlee/mongoid_auto_increment_id
43
44
  licenses: []
@@ -58,8 +59,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
58
59
  version: '0'
59
60
  requirements: []
60
61
  rubyforge_project:
61
- rubygems_version: 2.2.2
62
+ rubygems_version: 2.4.5
62
63
  signing_key:
63
64
  specification_version: 4
64
65
  summary: Override id field with MySQL like auto increment for Mongoid
65
66
  test_files: []
67
+ has_rdoc: