Class: Droonga::Catalog::CollectionVolume

Inherits:
Object
  • Object
show all
Defined in:
lib/droonga/catalog/collection_volume.rb

Instance Method Summary collapse

Constructor Details

#initialize(dataset, data) ⇒ CollectionVolume

Returns a new instance of CollectionVolume.



24
25
26
27
28
# File 'lib/droonga/catalog/collection_volume.rb', line 24

def initialize(dataset, data)
  @dataset = dataset
  @data = data
  compute_continuum if ratio_scaled_slicer?
end

Instance Method Details

#all_nodesObject



72
73
74
# File 'lib/droonga/catalog/collection_volume.rb', line 72

def all_nodes
  @all_nodes ||= collect_all_nodes
end

#choose_slice(record) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/droonga/catalog/collection_volume.rb', line 48

def choose_slice(record)
  return slices.first unless ratio_scaled_slicer?

  key = stringify_key(record[dimension])
  hash = Zlib.crc32(key)
  min = 0
  max = @continuum.size - 1
  while (min < max)
    index = (min + max) / 2
    value, key = @continuum[index]
    return key if value == hash
    if value > hash
      max = index
    else
      min = index + 1
    end
  end
  @continuum[max][1]
end

#dimensionObject



30
31
32
# File 'lib/droonga/catalog/collection_volume.rb', line 30

def dimension
  @data["dimension"] || "_key"
end

#ratio_scaled_slicer?Boolean

Returns:

  • (Boolean)


68
69
70
# File 'lib/droonga/catalog/collection_volume.rb', line 68

def ratio_scaled_slicer?
  slicer == "hash"
end

#select_slices(range = 0..-1)) ⇒ Object



44
45
46
# File 'lib/droonga/catalog/collection_volume.rb', line 44

def select_slices(range=0..-1)
  slices.sort_by(&:label)[range]
end

#slicerObject



34
35
36
# File 'lib/droonga/catalog/collection_volume.rb', line 34

def slicer
  @data["slicer"] || "hash"
end

#slicesObject



38
39
40
41
42
# File 'lib/droonga/catalog/collection_volume.rb', line 38

def slices
  @slices ||= @data["slices"].collect do |raw_slice|
    Slice.new(@dataset, raw_slice)
  end
end