nitro_pg_cache 0.1.rc1 → 0.1.1.rc1

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: 8e8a7e2dcc650c34494a5a2b8a5f701f7ec95023
4
- data.tar.gz: 9bd438f3d4f30f738b4d750061585b1e5e821f3c
3
+ metadata.gz: 01682be0423d2b4e7b061f19cd8faaa983b0a992
4
+ data.tar.gz: a1aa56e372e6daa72e62012a488781371cd942b6
5
5
  SHA512:
6
- metadata.gz: 6a4ab1152c2b6f30c8db51491cddd697f223a1c7d443949da17ac0b36e9c30f084a218f2595cc1e0190983a6efa045c29882fe6f4a6a76d01ced16116de20208
7
- data.tar.gz: 486d149799dcd32d72d13c43be979848208f232d5843897c78bef8cf6c069b2720814f885ef6d02b0ebb74ce69ed4110436a063de0d22a4a03ff4385cc71c534
6
+ metadata.gz: 62de0796c978a4f2c661f1068735f66ecb14d82355585ce19bf68aa88080689430ff1e66d3093f8e580c058dbc4a350cb2c1ea18fbe45dba4f5cff78681d6e1e
7
+ data.tar.gz: 8e09eed25db6f799b52949384303b7459a961cb5b96c8e02133ce60cfb95908cd7bfcc680b86c33a5eedc6a0be0018a709a7158bc6f8bf1b4bd35a5114cac4ea
data/README.md CHANGED
@@ -1,17 +1,17 @@
1
- # ATTENTION
1
+ ## ATTENTION
2
2
  To use this gem you need PostgreSQL 9.4 and higher!
3
3
 
4
- # ATTENTION(РУС)
4
+ ## ATTENTION(РУС)
5
5
  Для корректной работы библиотеки требуется версия PostgreSQL не ниже 9.4!
6
6
 
7
- # NitroPgCache
7
+ ## NitroPgCache
8
8
  This gem create DB-based solution for caching relation collections. It based on PostgreSQL version >= 9.4 .
9
9
  It faster than memcache+dalli combination. In some cases three times faster, but with all DB facilities!
10
10
 
11
11
  Right now nitro_pg_cache is in alpha-release state. It's working, but may need additional tuning and features, for example limits and expiring,
12
12
  actually I don't know which will suit best.
13
13
 
14
- # FEATURES
14
+ ## FEATURES
15
15
  Already working*:
16
16
  (* all benchmark numbers are given with pg_cache_key gem enabled, this mean that in rails < 5 or without pg_cache_key, you'll get +25% additional speed bonus for cached collection )
17
17
 
@@ -37,7 +37,7 @@ Can be done soon
37
37
  ( must check how mass update will suffer from json insert ).
38
38
  9. Expiring and quantity limits, cache expiring can be done on different conditions including last time viewed.
39
39
 
40
- # NitroPgCache (РУС)
40
+ ## NitroPgCache (РУС)
41
41
  Данная библиотека реализует кеширование relation-коллекций на основе движка PostgreSQL последних версий (>=9.4).
42
42
  Получившийся результат по всем показателям скороси не уступает
43
43
  классической схеме memcache+dalli, а во многих случаях и превосходит ее в разы, обладая при этом всеми достоинствами базы данных.
@@ -45,7 +45,7 @@ Can be done soon
45
45
  В настоящий момент библиотека находится в состоянии alpha-release. Основной функционал ее работает, но ряд дополнительных возможностей требует реализации.
46
46
  Например ограничения на количество кешей, устаревание кешей и пр. . Если есть какие-то пожелания какие конкретно должны быть возможности связанные с этим: велкам
47
47
 
48
- # ВОЗМОЖНОСТИ БИБЛИОТЕКИ
48
+ ## ВОЗМОЖНОСТИ БИБЛИОТЕКИ
49
49
 
50
50
  Реализованные возможности*:
51
51
  (* величины указаны при использовании гема pg_cache_key для реализации cache_key у коллекций,
@@ -67,7 +67,7 @@ Can be done soon
67
67
  ключу еще и Json для локалс.
68
68
  9. Устаревание И лимитирование кешей. Может быть реализовано многими способами.
69
69
 
70
- ## RESTRICTIONS:
70
+ ### RESTRICTIONS:
71
71
 
72
72
  Only clear collections rendering can be cached with this gem. i.e.:
73
73
  Can convert:
@@ -82,7 +82,7 @@ Only clear collections rendering can be cached with this gem. i.e.:
82
82
  =render partial: 'pagination_footer', records: @records
83
83
  ```
84
84
 
85
- ## ОГРАНИЧЕНИЯ:
85
+ ### ОГРАНИЧЕНИЯ:
86
86
 
87
87
  Только чистый кеш на коллекцию может использоваться с данной библиотекой:
88
88
  Может быть сконвертированно:
@@ -99,7 +99,7 @@ Only clear collections rendering can be cached with this gem. i.e.:
99
99
  =render partial: 'pagination_footer', records: @records
100
100
  ```
101
101
 
102
- ## CACHING ALGORITHMS ( STRAIGHT/REVERSE/ARRAY CACHING )
102
+ ### CACHING ALGORITHMS ( STRAIGHT/REVERSE/ARRAY CACHING )
103
103
 
104
104
  Three types of caching collection mechanism are used: straight, 'reverse', array-elem
105
105
  straight and reverse used for relation objects! array-elem - instantinated array or elem
@@ -117,7 +117,7 @@ array-elem (db_cache_array) - this is method used only with prerender: true for
117
117
  DON'T USE IT ELSEWHERE!! If you have complex hierarchy of models and don't include them on update action of your controller
118
118
  it may give you N+1 problem internally.
119
119
 
120
- ## ВАРИАНТЫ КЕШИРОВАНИЯ ( STRAIGHT/REVERSE/ARRAY CACHING )
120
+ ### ВАРИАНТЫ КЕШИРОВАНИЯ ( STRAIGHT/REVERSE/ARRAY CACHING )
121
121
 
122
122
  Прямой и реверсивный ( straight and reverse ) используются только для relation объектов. array cache используется только если prerender: true
123
123
  для измененного элемента.
@@ -134,7 +134,7 @@ array-elem (db_cache_array) - Этот метод используется то
134
134
  НЕ ИСПОЛЬЗУЙТЕ ЕГО НИГДЕ В ДРУГИХ СЛУЧАЯХ!
135
135
 
136
136
 
137
- ## BENCHMARK VS MEMCACHE + DALLI
137
+ ### BENCHMARK VS MEMCACHE + DALLI
138
138
 
139
139
  Comparisons were made manually with rack mini-profiler gem +
140
140
  I used htop system-monitor to be sure that nothing going in the background and tempering with results
@@ -186,7 +186,7 @@ In rails >= 5 or with pg_cache_key gem it will bring nearly same result i.e. rat
186
186
  |0.12K | 0.2-0.25 | 0.38s | ~1.7 times faster |
187
187
 
188
188
 
189
- ## СРАВНЕНИЕ С MEMCACHE + DALLI
189
+ ### СРАВНЕНИЕ С MEMCACHE + DALLI
190
190
 
191
191
  Сравнения провел вручную на живых страницах с исопльзованием rack mini-profiler gem.
192
192
  Используя htop, следил, чтобы ничего не загружало систему дополнительно и портило результаты.
@@ -236,26 +236,26 @@ mmch - (memcache) обычный матрешный кеш memcached + dalli
236
236
  |0.38K | 0.35+s | 0.6 | ~1.7 times faster |
237
237
  |0.12K | 0.2-0.25 | 0.38s | ~1.7 times faster |
238
238
 
239
- ## MEMORY USAGE
239
+ ### MEMORY USAGE
240
240
 
241
241
  I didn't make a special comparision, but I assume that there is a insufficient difference between usual cache and pg_cache.
242
242
 
243
243
 
244
- ## ИСПОЛЬЗОВАНИЕ ПАМЯТИ
244
+ ### ИСПОЛЬЗОВАНИЕ ПАМЯТИ
245
245
 
246
246
  Объем используемой памяти примерно одинаковый и может зависеть от того какой конкретно пришел запрос, сколько в нем уже
247
247
  закешированных элементов сколько новых и пр.
248
248
 
249
249
 
250
- ## GENERAL FALLBACK
250
+ ### GENERAL FALLBACK
251
251
  With any variant of prerender true/false all not found caches get themselves cached usual way as in prerender-false case. i.e. as usual cache will do.
252
252
 
253
- ## ОСНОВНОЕ ПОВЕДЕНИЕ ПО УМОЛЧАНИЮ
253
+ ### ОСНОВНОЕ ПОВЕДЕНИЕ ПО УМОЛЧАНИЮ
254
254
  Независимо от того стоит prerender-true или нет, если на момент запроса значение nitro_cache_value пустое,
255
255
  то кеширование запускается обычным ходом, который совпадает, с вариантом когда prerender-false.
256
256
 
257
257
 
258
- ## HOW IT BEHAVE WHEN SOMETHING CHANGES ( KEYS, PARTIALS, ETC )
258
+ ### HOW IT BEHAVE WHEN SOMETHING CHANGES ( KEYS, PARTIALS, ETC )
259
259
  The main rule of thumb: no prerendering at server start, only mass cleaning old and creating new nitro_partial records!
260
260
  If you are using prerender, then run rake task prerender in parallel manually or by any automation script
261
261
  The rules of cache changes are depended on prerender state of partial true|false
@@ -290,7 +290,7 @@ The rules of cache changes are depended on prerender state of partial true|false
290
290
  8. When expiration params changes При изменении параметров устаревания, проверяем в rake :expire_db_nitro_cache который можно в кронджобы вписать.
291
291
  все кеши на соответствие новым правилам. Ненужное удаляем.
292
292
 
293
- ## ПРАВИЛА ИЗМНЕНИЯ КЕША, ЕСЛИ ЧТО_ТО ПОМЕНЯЛОСЬ (РУС)
293
+ ### ПРАВИЛА ИЗМНЕНИЯ КЕША, ЕСЛИ ЧТО_ТО ПОМЕНЯЛОСЬ (РУС)
294
294
  Главное правило: никакого пререндеринга на старте сервера иначе у деплоя развяжется пупок.
295
295
  На старте только: массовое удаление устаревшего, создание новых записей nitro_partial для новых паршиалов.
296
296
  Правила поведения кеша при изменениях ( поведение зависит от значения prerender - true|false)
@@ -310,7 +310,7 @@ The rules of cache changes are depended on prerender state of partial true|false
310
310
  3. При изменении параметров устаревания, проверяем в rake :expire_db_nitro_cache который можно в кронджобы вписать.
311
311
  все кеши на соответствие новым правилам. Ненужное удаляем.
312
312
 
313
- ## PARTIAL PRERENDER
313
+ ### PARTIAL PRERENDER
314
314
 
315
315
  Since nitro_pg_cache works as usual cache* also we can prerender only for part of keys and part of records, only most wanted.
316
316
 
@@ -323,7 +323,7 @@ so we can set prerender scope with condition on :created_at column, and prerende
323
323
 
324
324
  *see section LIMITATIONS for more details on the possibilities of replacing usual feed cache with nitro
325
325
 
326
- ## ЧАСТИЧНЫЙ ПРЕРЕНДЕРИНГ
326
+ ### ЧАСТИЧНЫЙ ПРЕРЕНДЕРИНГ
327
327
  В силу того что nitro_cache может работать практически как обычный матрешный кеш* мы можем включить пререндеринг только для части
328
328
  ключей и части записей.
329
329
 
@@ -334,20 +334,20 @@ so we can set prerender scope with condition on :created_at column, and prerende
334
334
  Второй пример: мы ведем длинную историю оплат пользователей, но для работы бухов нужен последний квартал или там год
335
335
  мы можем выставить scope для пререндеринга по :created_at и пререрндерить только нужные записи.
336
336
 
337
- ## EXPIRING
337
+ ### EXPIRING
338
338
  Right now all cache get timestamp for the last access ( :viewed_at ) so it possible to control cache expiration on time basis
339
339
 
340
- ## УСТАРЕВАНИЕ
340
+ ### УСТАРЕВАНИЕ
341
341
  Сейчас все ключи хранят штамп времени последнего просмотра поэтому можно легко реализовать устаревающий кеш. например как рейк + крон-джоб
342
342
 
343
343
 
344
- ## STRAIGHT VS REVERSE VS CLASSIC POSSIBLE PROBLEMS
344
+ ### STRAIGHT VS REVERSE VS CLASSIC POSSIBLE PROBLEMS
345
345
  1. DB Sharding for reverse-cache. If we use db sharding reverse-cache may need additional tuning and testing since it's doing its job
346
346
  in two steps. Straight-cache will work anyway.
347
347
  2. Exotic cases for any variant of pg_cache. If we render same collection twice with different partial inside one controller action ( it's quite unusual behaviour ),
348
348
  than we may instatinate collection twice.
349
349
 
350
- ## STRAIGHT VS REVERSE VS CLASSIC ВЕРОЯТНЫЕ ПРОБЛЕМЫ
350
+ ### STRAIGHT VS REVERSE VS CLASSIC ВЕРОЯТНЫЕ ПРОБЛЕМЫ
351
351
  1. БД-шардинг при обратном кешировании. Если мы используем БД шардинг, то вариант реверс кеширования требует доработки, потому что мы должны спрашивать
352
352
  аггрегацию сразу же после того как сделали апдейт, поэтому по идее это должно идти на мастер-шард.
353
353
  2. Экзотические варинты многоразового рендеринга с разными паршиалами одной коллекции в одном методе контроллера. Тогда может быть многоразовая инстантинация
@@ -364,7 +364,7 @@ Right now all cache get timestamp for the last access ( :viewed_at ) so it possi
364
364
  ( это случай когда он параллельно был создан в соседнем процессе ) и если такого нет создается новый.
365
365
 
366
366
 
367
- ## Usage
367
+ ### Usage
368
368
 
369
369
  ### As cache replacement
370
370
  Replace:
@@ -410,6 +410,10 @@ class Request < ActiveRecord::Base
410
410
  as: :request,
411
411
  scope: Request.except_created.with_deleted.where(created_at: -6.month.from_now..Time.now ) )
412
412
  end
413
+
414
+ # prerender all scopes
415
+ Partial.all.each(&:update_caches)
416
+
413
417
  ```
414
418
 
415
419
 
@@ -164,6 +164,8 @@ class NitroPartial < ActiveRecord::Base
164
164
  end
165
165
 
166
166
  def update_cache_for_collection( collection, progress = nil )
167
+
168
+ nitro_caches.where( nitro_cacheable: collection ).delete_all
167
169
  cache_keys.values.each do |locals|
168
170
  progress.try(:inc)
169
171
  ApplicationController.render( assigns: {
@@ -1,3 +1,3 @@
1
1
  module NitroPgCache
2
- VERSION = '0.1.rc1'
2
+ VERSION = '0.1.1.rc1'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nitro_pg_cache
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.rc1
4
+ version: 0.1.1.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - alekseyl
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-16 00:00:00.000000000 Z
11
+ date: 2016-11-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -88,7 +88,7 @@ files:
88
88
  - lib/nitro_pg_cache/model_ext.rb
89
89
  - lib/nitro_pg_cache/version.rb
90
90
  - lib/nitro_pg_cache/viewer_ext.rb
91
- homepage: ''
91
+ homepage: https://github.com/alekseyl/nitro_pg_cache
92
92
  licenses:
93
93
  - MIT
94
94
  metadata: {}