1
0
mirror of https://github.com/Mrs4s/go-cqhttp.git synced 2025-05-05 03:23:49 +08:00

feat: 将 uin, tiny 分表以节省空间

This commit is contained in:
源文雨 2022-11-10 11:51:01 +08:00
parent 2d42a968c9
commit f1957e3814
2 changed files with 94 additions and 41 deletions

View File

@ -10,6 +10,8 @@ const (
Sqlite3QuotedInfoTableName = "quoinf" Sqlite3QuotedInfoTableName = "quoinf"
Sqlite3PrivateMessageTableName = "privmsg" Sqlite3PrivateMessageTableName = "privmsg"
Sqlite3GuildChannelMessageTableName = "guildmsg" Sqlite3GuildChannelMessageTableName = "guildmsg"
Sqlite3UinInfoTableName = "uininf"
Sqlite3TinyInfoTableName = "tinyinf"
) )
// StoredMessageAttribute 持久化消息属性 // StoredMessageAttribute 持久化消息属性
@ -18,7 +20,6 @@ type StoredMessageAttribute struct {
MessageSeq int32 MessageSeq int32
InternalID int32 InternalID int32
SenderUin int64 SenderUin int64
SenderName string
Timestamp int64 Timestamp int64
} }
@ -28,7 +29,6 @@ type StoredGuildMessageAttribute struct {
MessageSeq int64 MessageSeq int64
InternalID int64 InternalID int64
SenderTinyID int64 SenderTinyID int64
SenderName string
Timestamp int64 Timestamp int64
} }
@ -40,6 +40,18 @@ type QuotedInfo struct {
QuotedContent string // QuotedContent is json of original content QuotedContent string // QuotedContent is json of original content
} }
// UinInfo QQ 与 昵称
type UinInfo struct {
Uin int64
Name string
}
// TinyInfo Tiny 与 昵称
type TinyInfo struct {
ID int64
Name string
}
// StoredGroupMessage 持久化群消息 // StoredGroupMessage 持久化群消息
type StoredGroupMessage struct { type StoredGroupMessage struct {
GlobalID int32 GlobalID int32

View File

@ -77,6 +77,14 @@ func (s *database) Open() error {
if err != nil { if err != nil {
return errors.Wrap(err, "create sqlite3 table error") return errors.Wrap(err, "create sqlite3 table error")
} }
err = s.db.Create(Sqlite3UinInfoTableName, &UinInfo{})
if err != nil {
return errors.Wrap(err, "create sqlite3 table error")
}
err = s.db.Create(Sqlite3TinyInfoTableName, &TinyInfo{})
if err != nil {
return errors.Wrap(err, "create sqlite3 table error")
}
return nil return nil
} }
@ -108,12 +116,18 @@ func (s *database) GetGroupMessageByGlobalID(id int32) (*db.StoredGroupMessage,
err = s.db.Find(Sqlite3MessageAttributeTableName, &attr, "WHERE ID="+strconv.FormatInt(grpmsg.AttributeID, 10)) err = s.db.Find(Sqlite3MessageAttributeTableName, &attr, "WHERE ID="+strconv.FormatInt(grpmsg.AttributeID, 10))
s.RUnlock() s.RUnlock()
if err == nil { if err == nil {
ret.Attribute = &db.StoredMessageAttribute{ var uin UinInfo
MessageSeq: attr.MessageSeq, s.RLock()
InternalID: attr.InternalID, err = s.db.Find(Sqlite3UinInfoTableName, &attr, "WHERE Uin="+strconv.FormatInt(attr.SenderUin, 10))
SenderUin: attr.SenderUin, s.RUnlock()
SenderName: attr.SenderName, if err == nil {
Timestamp: attr.Timestamp, ret.Attribute = &db.StoredMessageAttribute{
MessageSeq: attr.MessageSeq,
InternalID: attr.InternalID,
SenderUin: attr.SenderUin,
SenderName: uin.Name,
Timestamp: attr.Timestamp,
}
} }
} }
} }
@ -154,12 +168,18 @@ func (s *database) GetPrivateMessageByGlobalID(id int32) (*db.StoredPrivateMessa
err = s.db.Find(Sqlite3MessageAttributeTableName, &attr, "WHERE ID="+strconv.FormatInt(privmsg.AttributeID, 10)) err = s.db.Find(Sqlite3MessageAttributeTableName, &attr, "WHERE ID="+strconv.FormatInt(privmsg.AttributeID, 10))
s.RUnlock() s.RUnlock()
if err == nil { if err == nil {
ret.Attribute = &db.StoredMessageAttribute{ var uin UinInfo
MessageSeq: attr.MessageSeq, s.RLock()
InternalID: attr.InternalID, err = s.db.Find(Sqlite3UinInfoTableName, &attr, "WHERE Uin="+strconv.FormatInt(attr.SenderUin, 10))
SenderUin: attr.SenderUin, s.RUnlock()
SenderName: attr.SenderName, if err == nil {
Timestamp: attr.Timestamp, ret.Attribute = &db.StoredMessageAttribute{
MessageSeq: attr.MessageSeq,
InternalID: attr.InternalID,
SenderUin: attr.SenderUin,
SenderName: uin.Name,
Timestamp: attr.Timestamp,
}
} }
} }
} }
@ -205,12 +225,18 @@ func (s *database) GetGuildChannelMessageByID(id string) (*db.StoredGuildChannel
err = s.db.Find(Sqlite3GuildMessageAttributeTableName, &attr, "WHERE ID="+strconv.FormatInt(guildmsg.AttributeID, 10)) err = s.db.Find(Sqlite3GuildMessageAttributeTableName, &attr, "WHERE ID="+strconv.FormatInt(guildmsg.AttributeID, 10))
s.RUnlock() s.RUnlock()
if err == nil { if err == nil {
ret.Attribute = &db.StoredGuildMessageAttribute{ var tiny TinyInfo
MessageSeq: uint64(attr.MessageSeq), s.RLock()
InternalID: uint64(attr.InternalID), err = s.db.Find(Sqlite3TinyInfoTableName, &attr, "WHERE ID="+strconv.FormatInt(attr.SenderTinyID, 10))
SenderTinyID: uint64(attr.SenderTinyID), s.RUnlock()
SenderName: attr.SenderName, if err == nil {
Timestamp: attr.Timestamp, ret.Attribute = &db.StoredGuildMessageAttribute{
MessageSeq: uint64(attr.MessageSeq),
InternalID: uint64(attr.InternalID),
SenderTinyID: uint64(attr.SenderTinyID),
SenderName: tiny.Name,
Timestamp: attr.Timestamp,
}
} }
} }
} }
@ -252,14 +278,19 @@ func (s *database) InsertGroupMessage(msg *db.StoredGroupMessage) error {
id++ id++
} }
s.Lock() s.Lock()
err := s.db.Insert(Sqlite3MessageAttributeTableName, &StoredMessageAttribute{ err := s.db.Insert(Sqlite3UinInfoTableName, &UinInfo{
ID: id, Uin: msg.Attribute.SenderUin,
MessageSeq: msg.Attribute.MessageSeq, Name: msg.Attribute.SenderName,
InternalID: msg.Attribute.InternalID,
SenderUin: msg.Attribute.SenderUin,
SenderName: msg.Attribute.SenderName,
Timestamp: msg.Attribute.Timestamp,
}) })
if err == nil {
err = s.db.Insert(Sqlite3MessageAttributeTableName, &StoredMessageAttribute{
ID: id,
MessageSeq: msg.Attribute.MessageSeq,
InternalID: msg.Attribute.InternalID,
SenderUin: msg.Attribute.SenderUin,
Timestamp: msg.Attribute.Timestamp,
})
}
s.Unlock() s.Unlock()
if err == nil { if err == nil {
grpmsg.AttributeID = id grpmsg.AttributeID = id
@ -328,14 +359,19 @@ func (s *database) InsertPrivateMessage(msg *db.StoredPrivateMessage) error {
id++ id++
} }
s.Lock() s.Lock()
err := s.db.Insert(Sqlite3MessageAttributeTableName, &StoredMessageAttribute{ err := s.db.Insert(Sqlite3UinInfoTableName, &UinInfo{
ID: id, Uin: msg.Attribute.SenderUin,
MessageSeq: msg.Attribute.MessageSeq, Name: msg.Attribute.SenderName,
InternalID: msg.Attribute.InternalID,
SenderUin: msg.Attribute.SenderUin,
SenderName: msg.Attribute.SenderName,
Timestamp: msg.Attribute.Timestamp,
}) })
if err == nil {
err = s.db.Insert(Sqlite3MessageAttributeTableName, &StoredMessageAttribute{
ID: id,
MessageSeq: msg.Attribute.MessageSeq,
InternalID: msg.Attribute.InternalID,
SenderUin: msg.Attribute.SenderUin,
Timestamp: msg.Attribute.Timestamp,
})
}
s.Unlock() s.Unlock()
if err == nil { if err == nil {
privmsg.AttributeID = id privmsg.AttributeID = id
@ -402,14 +438,19 @@ func (s *database) InsertGuildChannelMessage(msg *db.StoredGuildChannelMessage)
id++ id++
} }
s.Lock() s.Lock()
err := s.db.Insert(Sqlite3MessageAttributeTableName, &StoredGuildMessageAttribute{ err := s.db.Insert(Sqlite3TinyInfoTableName, &TinyInfo{
ID: id, ID: int64(msg.Attribute.SenderTinyID),
MessageSeq: int64(msg.Attribute.MessageSeq), Name: msg.Attribute.SenderName,
InternalID: int64(msg.Attribute.InternalID),
SenderTinyID: int64(msg.Attribute.SenderTinyID),
SenderName: msg.Attribute.SenderName,
Timestamp: msg.Attribute.Timestamp,
}) })
if err == nil {
err = s.db.Insert(Sqlite3MessageAttributeTableName, &StoredGuildMessageAttribute{
ID: id,
MessageSeq: int64(msg.Attribute.MessageSeq),
InternalID: int64(msg.Attribute.InternalID),
SenderTinyID: int64(msg.Attribute.SenderTinyID),
Timestamp: msg.Attribute.Timestamp,
})
}
s.Unlock() s.Unlock()
if err == nil { if err == nil {
guildmsg.AttributeID = id guildmsg.AttributeID = id