3.邮件系统邮件数据结构设计

  1. 3.邮件系统邮件数据结构设计
    1. 3.1 设计思路
    2. 3.2 核心实体类图
    3. 3.3 枚举定义
    4. 3.4 实体字段说明
      1. Item
      2. Mail
      3. MailBox
    5. 3.5 设计目标
    6. 3.6 优化思考

3.邮件系统邮件数据结构设计


3.1 设计思路

邮件系统中数据结构承担着“存储、索引、过期与回收”四大核心职能:

  1. 存储实体MailMailBox 分别承载“邮件内容”与“投递载体”两部分职责。
  2. 索引组织:通过 OwnerIdAccountIdMailBoxType 等字段,将海量邮件按玩家、类型与时间高效检索。
  3. 生命周期管理:利用 CreateTime / ExpireTime 驱动定时清理机制,自动回收失效数据。
  4. 领取记录Received 集合记录已领取玩家,保证“多目标一份”与“防重领”语义准确。

这种拆分让“邮件数据”既能灵活支持多场景分发,又能在高并发与海量存储下保持高效与可维护。


3.2 核心实体类图

classDiagram
  class Item {
    +string Name
  }

  class Mail {
    +long OwnerId
    +string Title
    +string Content
    +long CreateTime
    +long ExpireTime
    +int Money
    +MailState MailState
    +MailType MailType
    +List~Item~ Items
  }

  class MailBox {
    +Mail Mail
    +long CreateTime
    +long ExpireTime
    +MailBoxType MailBoxType
    +HashSet~long~ AccountId
    +HashSet~long~ Received
    +long SendAccountId
  }

  Item --> Mail : 包含
  Mail --> MailBox : 嵌入

3.3 枚举定义

public enum MailType {
  None = 0,
  System = 1,   // 系统邮件
  Rewards = 2,  // 活动/奖励邮件
  User = 3      // 玩家互发
}

public enum MailState {
  None = 0,
  Unread = 1,    // 未读
  HaveRead = 2,  // 已读
  NotClaimed = 3,// 未领取
  Received = 4   // 已领取
}

public enum MailBoxType {
  None = 0,
  Specify = 1,  // 指定玩家
  Online = 2,   // 在线玩家
  All = 3,      // 全服玩家
  AllToDate = 4 // 注册后玩家
}

public enum MailRemoveActionType {
  None = 0,
  Remove = 1,          // 手动删除
  ExpireTimeRemove = 2,// 过期清理
  Overtop = 3          // 超量回收
}

3.4 实体字段说明

Item

  • Name:物品名称,占位将来可扩展更多属性(ID、数量、稀有度等)。

Mail

  • OwnerId:归属玩家的唯一标识(AccountId)。
  • Title, Content:邮件标题与正文。
  • CreateTime, ExpireTime:触发过期回收的时戳。
  • Money:附带的金币数,可选。
  • MailState:读/领状态,用以 UI 展示红点与可操作。
  • MailType:区分系统、活动或玩家互发。
  • Items:克隆后的 Item 列表,确保邮件内容不可篡改。

MailBox

  • Mail:承载的 Mail 实例,负责内容和附件。
  • CreateTime, ExpireTime:邮件箱生命周期,与 Mail 分离,便于统一清理过期箱。
  • MailBoxType:决定分发策略:指定、在线、全服或限时。
  • AccountId:待发送的玩家 ID 集合。
  • Received:已领取玩家 ID 集合,防止重复领取。
  • SendAccountId:发件人 ID,用于审计与日志。

3.5 设计目标

  • 分层嵌套:将“内容”和“载体”拆为 Mail & MailBox,逻辑清晰易演化。
  • 双时间字段:邮件与邮件箱各自维护过期时间,实现“先到先清理”与“内容与投递时效解耦”。
  • 多目标投递AccountId + Received 支持一对多发放与后期批量清理。
  • 可扩展性:枚举和实体可无缝增补新类型(如基于等级、区域分发),无需改动存储模型。

3.6 优化思考

  • 索引优化:为 ExpireTimeAccountId 建立数据库二级索引,加速查询与清理。
  • 分表分库:海量邮件可按时间或玩家 ID 分片,提升并发写入与读取吞吐。
  • 二级缓存:热点玩家邮件可放入 Redis Cache,减少数据库压力。
  • 回收策略:支持“超期不自动删”或“保留操作日志”两种模式,根据运营需求灵活配置。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏