sdk/hints: simplify memory.

This commit is contained in:
fiatjaf 2025-04-06 11:56:48 -03:00
parent 2e28cc809a
commit a88b34ed3c

View File

@ -14,7 +14,7 @@ var _ hints.HintsDB = (*HintDB)(nil)
type HintDB struct { type HintDB struct {
RelayBySerial []string RelayBySerial []string
OrderedRelaysByPubKey map[string]RelaysForPubKey OrderedRelaysByPubKey map[string][]RelayEntry
sync.Mutex sync.Mutex
} }
@ -22,7 +22,7 @@ type HintDB struct {
func NewHintDB() *HintDB { func NewHintDB() *HintDB {
return &HintDB{ return &HintDB{
RelayBySerial: make([]string, 0, 100), RelayBySerial: make([]string, 0, 100),
OrderedRelaysByPubKey: make(map[string]RelaysForPubKey, 100), OrderedRelaysByPubKey: make(map[string][]RelayEntry, 100),
} }
} }
@ -41,9 +41,7 @@ func (db *HintDB) Save(pubkey string, relay string, key hints.HintKey, ts nostr.
defer db.Unlock() defer db.Unlock()
// fmt.Println(" ", relay, "index", relayIndex, "--", "adding", hints.HintKey(key).String(), ts) // fmt.Println(" ", relay, "index", relayIndex, "--", "adding", hints.HintKey(key).String(), ts)
rfpk, _ := db.OrderedRelaysByPubKey[pubkey] entries, _ := db.OrderedRelaysByPubKey[pubkey]
entries := rfpk.Entries
entryIndex := slices.IndexFunc(entries, func(re RelayEntry) bool { return re.Relay == relayIndex }) entryIndex := slices.IndexFunc(entries, func(re RelayEntry) bool { return re.Relay == relayIndex })
if entryIndex == -1 { if entryIndex == -1 {
@ -66,9 +64,7 @@ func (db *HintDB) Save(pubkey string, relay string, key hints.HintKey, ts nostr.
} }
} }
rfpk.Entries = entries db.OrderedRelaysByPubKey[pubkey] = entries
db.OrderedRelaysByPubKey[pubkey] = rfpk
} }
func (db *HintDB) TopN(pubkey string, n int) []string { func (db *HintDB) TopN(pubkey string, n int) []string {
@ -76,13 +72,13 @@ func (db *HintDB) TopN(pubkey string, n int) []string {
defer db.Unlock() defer db.Unlock()
urls := make([]string, 0, n) urls := make([]string, 0, n)
if rfpk, ok := db.OrderedRelaysByPubKey[pubkey]; ok { if entries, ok := db.OrderedRelaysByPubKey[pubkey]; ok {
// sort everything from scratch // sort everything from scratch
slices.SortFunc(rfpk.Entries, func(a, b RelayEntry) int { slices.SortFunc(entries, func(a, b RelayEntry) int {
return int(b.Sum() - a.Sum()) return int(b.Sum() - a.Sum())
}) })
for i, re := range rfpk.Entries { for i, re := range entries {
urls = append(urls, db.RelayBySerial[re.Relay]) urls = append(urls, db.RelayBySerial[re.Relay])
if i+1 == n { if i+1 == n {
break break
@ -97,9 +93,9 @@ func (db *HintDB) PrintScores() {
defer db.Unlock() defer db.Unlock()
fmt.Println("= print scores") fmt.Println("= print scores")
for pubkey, rfpk := range db.OrderedRelaysByPubKey { for pubkey, entries := range db.OrderedRelaysByPubKey {
fmt.Println("== relay scores for", pubkey) fmt.Println("== relay scores for", pubkey)
for i, re := range rfpk.Entries { for i, re := range entries {
fmt.Printf(" %3d :: %30s (%3d) ::> %12d\n", i, db.RelayBySerial[re.Relay], re.Relay, re.Sum()) fmt.Printf(" %3d :: %30s (%3d) ::> %12d\n", i, db.RelayBySerial[re.Relay], re.Relay, re.Sum())
// for i, ts := range re.Timestamps { // for i, ts := range re.Timestamps {
// fmt.Printf(" %-10d %s\n", ts, hints.HintKey(i).String()) // fmt.Printf(" %-10d %s\n", ts, hints.HintKey(i).String())
@ -113,13 +109,13 @@ func (db *HintDB) GetDetailedScores(pubkey string, n int) []hints.RelayScores {
defer db.Unlock() defer db.Unlock()
result := make([]hints.RelayScores, 0, n) result := make([]hints.RelayScores, 0, n)
if rfpk, ok := db.OrderedRelaysByPubKey[pubkey]; ok { if entries, ok := db.OrderedRelaysByPubKey[pubkey]; ok {
// sort everything from scratch // sort everything from scratch
slices.SortFunc(rfpk.Entries, func(a, b RelayEntry) int { slices.SortFunc(entries, func(a, b RelayEntry) int {
return int(b.Sum() - a.Sum()) return int(b.Sum() - a.Sum())
}) })
for i, re := range rfpk.Entries { for i, re := range entries {
if i >= n { if i >= n {
break break
} }
@ -133,10 +129,6 @@ func (db *HintDB) GetDetailedScores(pubkey string, n int) []hints.RelayScores {
return result return result
} }
type RelaysForPubKey struct {
Entries []RelayEntry
}
type RelayEntry struct { type RelayEntry struct {
Relay int Relay int
Timestamps [4]nostr.Timestamp Timestamps [4]nostr.Timestamp