mirror of
https://github.com/gogrlx/nats-server.git
synced 2026-04-17 03:24:40 -07:00
For memory store KV with history of 1 we were scanning for our next first when we did not have to.
Signed-off-by: Derek Collison <derek@nats.io>
This commit is contained in:
@@ -17359,3 +17359,34 @@ func Benchmark_JetStream10x1kWorker(b *testing.B) {
|
||||
func Benchmark_JetStream4x512Worker(b *testing.B) {
|
||||
benchJetStreamWorkersAndBatch(b, 4, 512)
|
||||
}
|
||||
|
||||
func TestJetStreamKVMemoryStorePerf(t *testing.T) {
|
||||
// Comment out to run, holding place for now.
|
||||
t.SkipNow()
|
||||
|
||||
s := RunBasicJetStreamServer()
|
||||
if config := s.JetStreamConfig(); config != nil {
|
||||
defer removeDir(t, config.StoreDir)
|
||||
}
|
||||
defer s.Shutdown()
|
||||
|
||||
nc, js := jsClientConnect(t, s)
|
||||
defer nc.Close()
|
||||
|
||||
kv, err := js.CreateKeyValue(&nats.KeyValueConfig{Bucket: "TEST", History: 1, Storage: nats.MemoryStorage})
|
||||
require_NoError(t, err)
|
||||
|
||||
start := time.Now()
|
||||
for i := 0; i < 100_000; i++ {
|
||||
_, err := kv.PutString(fmt.Sprintf("foo.%d", i), "HELLO")
|
||||
require_NoError(t, err)
|
||||
}
|
||||
fmt.Printf("Took %v for first run\n", time.Since(start))
|
||||
|
||||
start = time.Now()
|
||||
for i := 0; i < 100_000; i++ {
|
||||
_, err := kv.PutString(fmt.Sprintf("foo.%d", i), "HELLO")
|
||||
require_NoError(t, err)
|
||||
}
|
||||
fmt.Printf("Took %v for second run\n", time.Since(start))
|
||||
}
|
||||
|
||||
@@ -753,7 +753,12 @@ func (ms *memStore) removeSeqPerSubject(subj string, seq uint64) {
|
||||
if seq != ss.First {
|
||||
return
|
||||
}
|
||||
// TODO(dlc) - Might want to optimize this.
|
||||
// If we know we only have 1 msg left don't need to search for next first.
|
||||
if ss.Msgs == 1 {
|
||||
ss.First = ss.Last
|
||||
return
|
||||
}
|
||||
// TODO(dlc) - Might want to optimize this longer term.
|
||||
for tseq := seq + 1; tseq <= ss.Last; tseq++ {
|
||||
if sm := ms.msgs[tseq]; sm != nil && sm.subj == subj {
|
||||
ss.First = tseq
|
||||
|
||||
Reference in New Issue
Block a user