BenchmarkIterator_LargeValues tests iteration with large values
(b *testing.B)
| 397 | |
| 398 | // BenchmarkIterator_LargeValues tests iteration with large values |
| 399 | func BenchmarkIterator_LargeValues(b *testing.B) { |
| 400 | dir := b.TempDir() |
| 401 | opts := DefaultOptions |
| 402 | opts.Dir = dir |
| 403 | opts.SegmentSize = 256 * 1024 * 1024 |
| 404 | opts.SyncEnable = false |
| 405 | |
| 406 | db, err := Open(opts) |
| 407 | if err != nil { |
| 408 | b.Fatalf("Failed to open database: %v", err) |
| 409 | } |
| 410 | defer func() { _ = db.Close() }() |
| 411 | |
| 412 | bucket := "large_bucket" |
| 413 | largeValue := make([]byte, 64*1024) // 64KB values |
| 414 | |
| 415 | err = db.Update(func(tx *Tx) error { |
| 416 | if err := tx.NewKVBucket(bucket); err != nil { |
| 417 | return err |
| 418 | } |
| 419 | for i := 0; i < 1000; i++ { |
| 420 | key := testutils.GetTestBytes(i) |
| 421 | if err := tx.Put(bucket, key, largeValue, Persistent); err != nil { |
| 422 | return err |
| 423 | } |
| 424 | } |
| 425 | return nil |
| 426 | }) |
| 427 | if err != nil { |
| 428 | b.Fatalf("Failed to populate database: %v", err) |
| 429 | } |
| 430 | |
| 431 | b.ResetTimer() |
| 432 | b.ReportAllocs() |
| 433 | |
| 434 | for i := 0; i < b.N; i++ { |
| 435 | err := db.View(func(tx *Tx) error { |
| 436 | iterator := NewIterator(tx, bucket, IteratorOptions{Reverse: false}) |
| 437 | defer iterator.Release() |
| 438 | |
| 439 | for iterator.Valid() { |
| 440 | _, err := iterator.Value() |
| 441 | if err != nil { |
| 442 | return err |
| 443 | } |
| 444 | if !iterator.Next() { |
| 445 | break |
| 446 | } |
| 447 | } |
| 448 | return nil |
| 449 | }) |
| 450 | if err != nil { |
| 451 | b.Fatalf("View failed: %v", err) |
| 452 | } |
| 453 | } |
| 454 | } |
nothing calls this directly
no test coverage detected