pg_cache_key 0.1.5 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e77a9f091922442dc6b19d2015d53e1e7bf93ece
4
- data.tar.gz: 339813b6a21d0b8de74412de8b62567ad341ab3e
3
+ metadata.gz: 995d11055ccb51441104752165aa4d6e98822cbe
4
+ data.tar.gz: d4dd6e20765a25e16a04eb124a437ec83fc3bf35
5
5
  SHA512:
6
- metadata.gz: 930b14dc2c3545747b6209db0f378d403eb3a695b04de241ac6e934d5483636db09c6fb8bb109986bc918dd9c0782d8adc3a0e063848c63184662b5e93a4e448
7
- data.tar.gz: 20bf20ebcda951fae3d0e5107bbd08de7e2a10c7be761daccbdf2f12c9ddaeeba91ecb16177bd2980658da9c60e6697a1358fe35842e19a6b65f7ba844535410
6
+ metadata.gz: '02802c91e0378b83668dd11854a425fdcd96244c50e9be3f68ba59140ebc4b21998d9ad2722233709b387d84b7a5b0f4a0d796d88643348ca136ee4c34618bfe'
7
+ data.tar.gz: 945a514b98459e782d6e34cd6c5a8a90e94735d948c4789dd271edca462c6551e78b7e73c17bfb74bfe6b7a86ed5f0e3a9e19aaa360bae5408fb87ea076677e7
data/README.md CHANGED
@@ -42,6 +42,22 @@ without includes: 10 items in collection ~ x1.2 faster, 20 ~ x1.25, 50 ~ x1.5, 1
42
42
 
43
43
  with includes: 10 items in collection ~ x3.6 faster, 20 ~ x4, 50 ~ x5.6, 1000 ~ x32
44
44
 
45
+ Benchmark code can look like this:
46
+
47
+ ```ruby
48
+ def cache_key_vs_db_checksum(n, model_or_relation = Request)
49
+ Benchmark.ips do |bm|
50
+
51
+ bm.report(:direct_cache_key_rnd) { ApplicationController.new.fragment_cache_key( model_or_relation.limit(n).random().old_cache_key ) ; :done }
52
+ bm.report(:checksummed_cache_key_rnd ) { ApplicationController.new.fragment_cache_key( model_or_relation.limit(n).random().new_cash_key ); :done }
53
+
54
+ bm.compare!
55
+ end
56
+
57
+ end
58
+ ```
59
+ Rem: since gem replaces cache_key, this code will need some changes to benchmark on your machine
60
+
45
61
  Of course this is not the numbers for whole page rendering, but it's noticeable.
46
62
 
47
63
  One of my real page goes from 0.8+ sec, for largest available pagination, to 0.6 sec per page
@@ -72,9 +88,12 @@ It works out of the box.
72
88
  По идее работает само из коробки, но если будут траблы - пишите.
73
89
 
74
90
  ## Testing
91
+ rake spec
92
+
75
93
  Tested only query string for simple case. In your project you may test it on more specific query.
76
94
 
77
95
  ## Testing(рус)
96
+ rake spec
78
97
  Тестируется только строка запроса для самого простого случая + добавление метода в активрекорд релейшен.
79
98
  Стабильность на сложных запросах специфических для вашего приложения можете добавить в свои тесты.
80
99
 
@@ -1,3 +1,3 @@
1
1
  module PgCacheKey
2
- VERSION = "0.1.5"
2
+ VERSION = "0.1.6"
3
3
  end
data/lib/pg_cache_key.rb CHANGED
@@ -1,24 +1,14 @@
1
1
  require "pg_cache_key/version"
2
2
 
3
- # In rails 5 it can be
4
- # module ActiveRecord
5
- # module CollectionCacheKey
6
- # def collection_cache_key(collection = all, timestamp_column = :updated_at) # :nodoc:
7
- # # why use connection.execute instead of doing collection.select because of an order. if you using some order on your scope
8
- # # then columns you using to order must appear in the GROUP BY clause or be used in an aggregate function or you will get an error
9
- # cache_columns = [timestamp_column, :id]
10
- # @cache_keys ||= {}
11
- # # we need to add select cache_columns explicitly because if relation has includes it might transform columns to aliases
12
- # @cache_keys[timestamp_column] ||= connection.execute( "SELECT md5(string_agg( #{cache_columns.map{|fld| "\"t\".\"#{fld}\"::text" }.join('||')}, '') ) as cache_key
13
- # FROM (#{ collection.select(cache_columns).try(:to_sql) }) t" )[0]['cache_key']
14
- # end
15
- # end
16
- # end
17
-
18
3
  module PgCacheKey
19
4
  def cache_key_raw_sql( timestamp_column = :updated_at )
20
- "SELECT md5(string_agg( t.ckc_#{timestamp_column}||t.ckc_id, '') ) as cache_key \
21
- FROM (#{ select( [timestamp_column, :id].map{|ckc| "#{table_name}.#{ckc}::text as ckc_#{ckc}" } ).try(:to_sql) }) t"
5
+ # Rem 1: why use connection.execute instead of doing collection.select because of an order. if you using some order on your scope
6
+ # then columns you using to order must appear in the GROUP BY clause or be used in an aggregate function or you will get an error
7
+ # Rem 2: we need to add select( cache_columns ) explicitly because if relation include it might transform columns to aliases
8
+ # and we must also select them as uniq-aliase so PG wouldn't be confused
9
+ # 'ckc' means cache key column :)
10
+ "SELECT md5(string_agg( t.ckc_#{timestamp_column}||t.ckc_id, '') ) as cache_key FROM (#{
11
+ select( [timestamp_column, :id].map{|ckc| "#{table_name}.#{ckc}::text as ckc_#{ckc}" } ).try(:to_sql) }) t"
22
12
  end
23
13
  end
24
14
 
@@ -40,12 +30,8 @@ module ActiveRecord
40
30
  include PgCacheKey
41
31
 
42
32
  def cache_key(timestamp_column = :updated_at)
33
+ return "#{self.class.to_s.underscore}/blank" if blank?
43
34
  @cache_keys ||= {}
44
- # Rem 1: why use connection.execute instead of doing collection.select because of an order. if you using some order on your scope
45
- # then columns you using to order must appear in the GROUP BY clause or be used in an aggregate function or you will get an error
46
- # Rem 2: we need to add select( cache_columns ) explicitly because if relation has includes it might transform columns to aliases
47
- # and we must also select them as uniq-aliase so PG wouldn't be confused
48
- # 'ckc' means cache key column :)
49
35
  @cache_keys[timestamp_column] ||= connection.execute( cache_key_raw_sql(timestamp_column) )[0]['cache_key']
50
36
  end
51
37
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pg_cache_key
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - alekseyl
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-09-26 00:00:00.000000000 Z
11
+ date: 2017-06-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -133,7 +133,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
133
133
  version: '0'
134
134
  requirements: []
135
135
  rubyforge_project:
136
- rubygems_version: 2.5.1
136
+ rubygems_version: 2.6.8
137
137
  signing_key:
138
138
  specification_version: 4
139
139
  summary: collection_cache_key replacement for system which uses PG as DB