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 {
RelayBySerial []string
OrderedRelaysByPubKey map[string]RelaysForPubKey
OrderedRelaysByPubKey map[string][]RelayEntry
sync.Mutex
}
@ -22,7 +22,7 @@ type HintDB struct {
func NewHintDB() *HintDB {
return &HintDB{
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()
// fmt.Println(" ", relay, "index", relayIndex, "--", "adding", hints.HintKey(key).String(), ts)
rfpk, _ := db.OrderedRelaysByPubKey[pubkey]
entries := rfpk.Entries
entries, _ := db.OrderedRelaysByPubKey[pubkey]
entryIndex := slices.IndexFunc(entries, func(re RelayEntry) bool { return re.Relay == relayIndex })
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] = rfpk
db.OrderedRelaysByPubKey[pubkey] = entries
}
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()
urls := make([]string, 0, n)
if rfpk, ok := db.OrderedRelaysByPubKey[pubkey]; ok {
if entries, ok := db.OrderedRelaysByPubKey[pubkey]; ok {
// 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())
})
for i, re := range rfpk.Entries {
for i, re := range entries {
urls = append(urls, db.RelayBySerial[re.Relay])
if i+1 == n {
break
@ -97,9 +93,9 @@ func (db *HintDB) PrintScores() {
defer db.Unlock()
fmt.Println("= print scores")
for pubkey, rfpk := range db.OrderedRelaysByPubKey {
for pubkey, entries := range db.OrderedRelaysByPubKey {
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())
// for i, ts := range re.Timestamps {
// 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()
result := make([]hints.RelayScores, 0, n)
if rfpk, ok := db.OrderedRelaysByPubKey[pubkey]; ok {
if entries, ok := db.OrderedRelaysByPubKey[pubkey]; ok {
// 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())
})
for i, re := range rfpk.Entries {
for i, re := range entries {
if i >= n {
break
}
@ -133,10 +129,6 @@ func (db *HintDB) GetDetailedScores(pubkey string, n int) []hints.RelayScores {
return result
}
type RelaysForPubKey struct {
Entries []RelayEntry
}
type RelayEntry struct {
Relay int
Timestamps [4]nostr.Timestamp