sharded

package
v1.5.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 28, 2025 License: Apache-2.0 Imports: 7 Imported by: 0

Documentation

Index

Constants

View Source
const NumOfShards = 2048

Variables

View Source
var AverageCacheEntryWeight = atomic.Int64{}

Functions

func MapShardKey

func MapShardKey(key uint64) uint64

MapShardKey — быстрый маппинг ключа в шард.

Types

type Map

type Map[V Value] struct {
	// contains filtered or unexported fields
}

Map — шардированная concurrent-мапа с аккуратными глобальными счётчиками.

func NewMap

func NewMap[V Value](ctx context.Context, cfg config.Config) *Map[V]

NewMap — создаёт шардированную мапу и инициализирует шарды.

func (*Map[V]) Clear added in v1.4.0

func (smap *Map[V]) Clear()

Clear — подчистка всех шардов с корректной агрегацией счётчиков.

func (*Map[V]) EvictOne added in v1.4.4

func (smap *Map[V]) EvictOne(shardSample, entrySample int) (freed int64, ok bool)

EvictOne — удаляет один самый «холодный» ключ по результатам семплинга, с обязательной revalidation под эксклюзивным локом шарда.

func (*Map[V]) Get

func (smap *Map[V]) Get(key uint64) (value V, ok bool)

Get — чтение значения.

func (*Map[V]) Len

func (smap *Map[V]) Len() int64

func (*Map[V]) Mem

func (smap *Map[V]) Mem() int64

func (*Map[V]) MostLoaded added in v1.4.4

func (smap *Map[V]) MostLoaded(bestOf int) *Shard[V]

MostLoaded — семплирует S шардов (8) и возвращает самый «тяжёлый» по байтам.

func (*Map[V]) NextShard added in v1.4.4

func (smap *Map[V]) NextShard() *Shard[V]

NextShard — round-robin без локов (дешёвая энтропия для семплинга).

func (*Map[V]) Remove

func (smap *Map[V]) Remove(key uint64) (freedBytes int64, hit bool)

Remove — удаление по ключу с корректной агрегацией счётчиков.

func (*Map[V]) Rnd added in v0.9.3

func (smap *Map[V]) Rnd() (value V, ok bool)

Rnd — недорогое случайное значение (без глобального math/rand).

func (*Map[V]) ScanOutdatedN added in v1.4.4

func (smap *Map[V]) ScanOutdatedN(dst []V, shardSample, entriesSample int) (out []V, found int)

ScanOutdatedN - собирает entriesSample кандидатов с shardSample потенциальных шардов.

func (*Map[V]) Set

func (smap *Map[V]) Set(key uint64, value V)

Set — вставка/обновление с корректировкой глобальных счётчиков по дельтам.

func (*Map[V]) Shard

func (smap *Map[V]) Shard(key uint64) *Shard[V]

Shard — получить шард по ключу.

func (*Map[V]) UpdateAvgEntryWeightGauge added in v1.5.0

func (smap *Map[V]) UpdateAvgEntryWeightGauge() (actual int64)

TODO move to separated worker

func (*Map[V]) WalkShards

func (smap *Map[V]) WalkShards(ctx context.Context, fn func(key uint64, shard *Shard[V]))

WalkShards — конкурентный обход шардов.

type Shard

type Shard[V Value] struct {
	*sync.RWMutex
	// contains filtered or unexported fields
}

Shard — независимый сегмент шардированной мапы.

func NewShard

func NewShard[V Value](id uint64) *Shard[V]

NewShard — создаёт шард с предустановленной ёмкостью карты.

func (*Shard[V]) Clear added in v0.9.7

func (sh *Shard[V]) Clear() (freedBytes int64, items int64)

Clear — полностью очищает шард и возвращает освобождённые байты и количество удалённых элементов.

func (*Shard[V]) Get

func (sh *Shard[V]) Get(key uint64) (value V, ok bool)

Get — чтение под RLock.

func (*Shard[V]) GetRand added in v0.9.5

func (sh *Shard[V]) GetRand() (value V, ok bool)

GetRand — возвращает «случайный» элемент за O(1..N) без глобального rand. Используем небольшой «skip» по счётчику, чтобы не бить в начало map каждый раз.

func (*Shard[V]) ID

func (sh *Shard[V]) ID() uint64

func (*Shard[V]) Len

func (sh *Shard[V]) Len() int64

func (*Shard[V]) Remove

func (sh *Shard[V]) Remove(key uint64) (freedBytes int64, hit bool)

Remove — удаление под Lock.

func (*Shard[V]) RemoveLocked added in v1.4.4

func (sh *Shard[V]) RemoveLocked(key uint64) (freedBytes int64, hit bool)

RemoveLocked — удаление при уже удерживаемом Lock() (атомарный блок с внешними действиями).

func (*Shard[V]) Set

func (sh *Shard[V]) Set(key uint64, v V) (bytesDelta int64, lenDelta int64)

Set — вставка/обновление. Возвращает дельты для агрегированных счётчиков.

func (*Shard[V]) WalkR added in v1.4.4

func (sh *Shard[V]) WalkR(ctx context.Context, fn func(uint64, V) bool)

WalkR — обход пар (k,v) под RLock. fn должен быть лёгким и не блокироваться надолго.

func (*Shard[V]) WalkW added in v1.4.4

func (sh *Shard[V]) WalkW(ctx context.Context, fn func(uint64, V) bool)

WalkW — обход под эксклюзивным Lock. Использовать осторожно.

func (*Shard[V]) Weight

func (sh *Shard[V]) Weight() int64

type Value

type Value interface {
	types.Keyed         // MapKey() uint64
	types.Sized         // Weight() int64
	types.Refreshable   // ShouldBeRefreshed(cfg config.Config) bool
	types.Timestampable // TouchedAt() int64 (монотонный, дёшевый)
}

Value — требования к объекту в шардированной мапе. Должен уметь: предоставить ключ, вес, "освежаемость" и "время касания".

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL