Browse Source

Cache disk fingerprint->metric lookups in memory.

pull/305/head
Julius Volz 12 years ago
parent
commit
71199e2c93
  1. 25
      storage/metric/memory.go
  2. 1
      storage/metric/tiered.go

25
storage/metric/memory.go

@ -175,14 +175,28 @@ func (s *memorySeriesStorage) AppendSample(sample model.Sample) error {
s.Lock() s.Lock()
defer s.Unlock() defer s.Unlock()
metric := sample.Metric fingerprint := model.NewFingerprintFromMetric(sample.Metric)
fingerprint := model.NewFingerprintFromMetric(metric) series := s.getOrCreateSeries(sample.Metric, fingerprint)
series, ok := s.fingerprintToSeries[*fingerprint] series.add(sample.Timestamp, sample.Value)
if s.wmCache != nil { if s.wmCache != nil {
s.wmCache.Set(fingerprint, &Watermarks{High: sample.Timestamp}) s.wmCache.Set(fingerprint, &Watermarks{High: sample.Timestamp})
} }
return nil
}
func (s *memorySeriesStorage) CreateEmptySeries(metric model.Metric) {
s.Lock()
defer s.Unlock()
fingerprint := model.NewFingerprintFromMetric(metric)
s.getOrCreateSeries(metric, fingerprint)
}
func (s *memorySeriesStorage) getOrCreateSeries(metric model.Metric, fingerprint *model.Fingerprint) *stream {
series, ok := s.fingerprintToSeries[*fingerprint]
if !ok { if !ok {
series = newStream(metric) series = newStream(metric)
s.fingerprintToSeries[*fingerprint] = series s.fingerprintToSeries[*fingerprint] = series
@ -201,10 +215,7 @@ func (s *memorySeriesStorage) AppendSample(sample model.Sample) error {
s.labelNameToFingerprints[k] = labelNameValues s.labelNameToFingerprints[k] = labelNameValues
} }
} }
return series
series.add(sample.Timestamp, sample.Value)
return nil
} }
// Append raw samples, bypassing indexing. Only used to add data to views, // Append raw samples, bypassing indexing. Only used to add data to views,

1
storage/metric/tiered.go

@ -666,6 +666,7 @@ func (t *TieredStorage) GetMetricForFingerprint(f *model.Fingerprint) (model.Met
} }
if m == nil { if m == nil {
m, err = t.DiskStorage.GetMetricForFingerprint(f) m, err = t.DiskStorage.GetMetricForFingerprint(f)
t.memoryArena.CreateEmptySeries(m)
} }
return m, err return m, err
} }

Loading…
Cancel
Save