Module: RedisCounters::ClusterizeAndPartitionize

Included in:
HashCounter, UniqueValuesLists::Base
Defined in:
lib/redis_counters/clusterize_and_partitionize.rb

Instance Method Summary collapse

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