Module: RedisCounters::ClusterizeAndPartitionize
- Included in:
- HashCounter, UniqueValuesLists::Base
- Defined in:
- lib/redis_counters/clusterize_and_partitionize.rb
Instance Method Summary collapse
-
#data(params = {}) ⇒ Object
Public: Возвращает данные счетчика для указанной кластера из указанных партиций.
-
#delete_all!(cluster = {}) ⇒ Object
Public: Транзакционно удаляет все данные счетчика в кластере.
-
#delete_all_direct!(cluster, write_session = redis, parts = partitions(cluster)) ⇒ Object
Public: Нетранзакционно удаляет все данные счетчика в кластере.
-
#delete_partition_direct!(params = {}, write_session = redis) ⇒ Object
Public: Нетранзакционно удаляет данные конкретной конечной партиции.
-
#delete_partitions!(params = {}) ⇒ Object
Public: Транзакционно удаляет данные указанной партиций или всех её подпартиций.
-
#partitions(params = {}) ⇒ Object
Public: Возвращает массив партиций (подпартиций) кластера в виде хешей.
Instance Method Details
#data(params = {}) ⇒ Object
Public: Возвращает данные счетчика для указанной кластера из указанных партиций.
params - Hash - хеш параметров, определяющий кластер и партицию.
Партиция может быть не задана, тогда будут возвращены все партиции кластера. Может быть задана не листовая партиция, тогда будут все её листовые подпартции.
Если передан блок, то вызывает блок для каждой партиции. Если блок, не передн, то аккумулирует данные, из всех запрошенных партиций, и затем возвращает их.
Returns Array Of Hash.
41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/redis_counters/clusterize_and_partitionize.rb', line 41 def data(params = {}) total_rows = 0 cluster = ::RedisCounters::Cluster.new(self, params).params parts = partitions(params).map { |partition| ::RedisCounters::Partition.new(self, partition).params } result = parts.flat_map do |partition| rows = partition_data(cluster, partition) total_rows += rows.size block_given? ? yield(rows) : rows end block_given? ? total_rows : result end |
#delete_all!(cluster = {}) ⇒ Object
Public: Транзакционно удаляет все данные счетчика в кластере. Если кластеризация не используется, то удаляет все данные.
cluster - Hash - хеш параметров, определяющих кластер.
Если передан блок, то вызывает блок, после удаления всех данных, в транзакции.
Returns Nothing.
85 86 87 88 89 90 91 92 |
# File 'lib/redis_counters/clusterize_and_partitionize.rb', line 85 def delete_all!(cluster = {}) parts = partitions(cluster) transaction do delete_all_direct!(cluster, redis, parts) yield if block_given? end end |
#delete_all_direct!(cluster, write_session = redis, parts = partitions(cluster)) ⇒ Object
Public: Нетранзакционно удаляет все данные счетчика в кластере. Если кластеризация не используется, то удаляет все данные.
cluster - Hash - хеш параметров, определяющих кластер. write_session - Redis - соединение с Redis, в рамках которого
Returns Nothing.
123 124 125 126 127 |
# File 'lib/redis_counters/clusterize_and_partitionize.rb', line 123 def delete_all_direct!(cluster, write_session = redis, parts = partitions(cluster)) parts.each do |partition| delete_partition_direct!(cluster.merge(partition), write_session) end end |
#delete_partition_direct!(params = {}, write_session = redis) ⇒ Object
Public: Нетранзакционно удаляет данные конкретной конечной партиции.
params - Hash - хеш параметров, определяющий кластер и листовую партицию.
write_session - Redis - соединение с Redis, в рамках которого
Должна быть задана конкретная листовая партиция.
Returns Nothing.
106 107 108 109 110 111 |
# File 'lib/redis_counters/clusterize_and_partitionize.rb', line 106 def delete_partition_direct!(params = {}, write_session = redis) cluster = ::RedisCounters::Cluster.new(self, params).params partition = ::RedisCounters::Partition.new(self, params).params(:only_leaf => true) key = key(partition, cluster) write_session.del(key) end |
#delete_partitions!(params = {}) ⇒ Object
Public: Транзакционно удаляет данные указанной партиций или всех её подпартиций.
params - Hash - хеш параметров, определяющий кластер и партицию.
Партиция может быть не задана, тогда будут возвращены все партиции кластера. Может быть задана не листовая партиция, тогда будут все её листовые подпартции.
Если передан блок, то вызывает блок, после удаления всех данных, в транзакции.
Returns Nothing.
66 67 68 69 70 71 72 73 |
# File 'lib/redis_counters/clusterize_and_partitionize.rb', line 66 def delete_partitions!(params = {}) parts = partitions(params) transaction do parts.each { |partition| delete_partition_direct!(params.merge(partition)) } yield if block_given? end end |
#partitions(params = {}) ⇒ Object
Public: Возвращает массив партиций (подпартиций) кластера в виде хешей.
Если партиция не указана, возвращает все партиции кластера.
params - Hash - хеш параметров, определяющий кластер и партицию.
Партиция может быть не задана, тогда будут возвращены все партиции кластера. Может быть задана не листовая партиция, тогда будут все её листовые подпартции.
Returns Array Of Hash.
19 20 21 22 23 24 25 26 |
# File 'lib/redis_counters/clusterize_and_partitionize.rb', line 19 def partitions(params = {}) partitions_keys(params).map do |part| # parse and exclude counter_name and cluster part = part.split(key_delimiter, -1).from(1).from(cluster_keys.size) # construct hash Hash[partition_keys.zip(part)].with_indifferent_access end end |