golang 程序休眠_减少休眠中的数据量,同时仍然使用休眠功能

假设我有一个这样的数据库:(不是实际的数据库,但足以说明问题)

“完成”和“总计”字段只是isComplete和每个条件(每个任务列表或每个项目)的任务总数记录的计数器。重复它们(数据库非规范化?)以便于获取,因为在每个阶段我都希望包括进度计数器。

我有这样的实体:

// other fields, getter and setters omitted for brevity

@Entity

@Table(name = "user_info")

public class User {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

@Column(name = "id")

private int id;

@Column(name = "username")

private String userName;

@Column(name = "image")

private String imageUrl;

@ManyToMany

@JoinTable(name = "project_user",

joinColumns = @JoinColumn(name="user_id"),

inverseJoinColumns = @JoinColumn(name="project_id"))

private Set projects;

}

@Entity

@Table(name = "project")

public class Project {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

@Column(name = "id")

private int id;

@Column(name = "name")

private String name;

@OneToOne

@JoinColumn(name = "creator_id")

private User creator;

@Column(name = "image")

private String imageUrl;

@Column(name = "creation_date")

private Date createdAt;

@Column(name = "total")

private int total;

@Column(name = "complete")

private int complete;

@ManyToMany

@JoinTable(name = "project_user",

joinColumns = @JoinColumn(name="project_id"),

inverseJoinColumns = @JoinColumn(name="user_id"))

@JsonIgnoreProperties(value = {"projects", "connected", "notifications"})

private Set members;

@OneToMany(fetch = FetchType.LAZY)

@JoinColumn(name = "project_id")

private Set taskLists;

}

@Entity

@Table(name = "task_list")

public class TaskList {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

@Column(name = "id")

private int id;

@Column(name = "name")

private String name;

@Column(name = "image")

private String imageUrl;

@Column(name = "creation_date")

private Date createdAt;

@Column(name = "complete")

private int complete;

@Column(name = "total")

private int total;

@OneToMany

@JoinColumn(name = "task_list_id")

private Set tasks;

}

@Entity

@Table(name = "task")

public class Task {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

@Column(name = "id")

private int id;

@Column(name = "description")

private String description;

@Column(name = "title")

private String title;

@ElementCollection

@CollectionTable(name = "task_images", joinColumns = @JoinColumn(name="task_id"))

@Column(name = "image")

private Set imageUrls;

@OneToMany

@JoinColumn(name = "task_id")

private Set handledBy;

@Transient

private Set notes;

@Column(name = "complete")

private boolean complete;

@Column(name = "creation_date")

private Date createdAt;

@Column(name = "completion_date")

private Date completeDate;

}

@Entity

@Table(name = "task_handler")

public class TaskMember {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

@Column(name = "id")

private int id;

@OneToOne

@JoinColumn(name = "id", referencedColumnName = "user_id")

private User user;

@Column(name = "assignmentType")

private String assignmentType; //maybe change to enum?

}

问题是添加一些json忽略属性(以解决循环序列化问题)后,我得到了一个像这样的json:

user: {

//fields

projects: [{

//fields

tasklist: [{

//fields

tasks: [{

//fields

}]

}]

}]

}

这不仅是一个巨大的响应(包含几乎所有数据),而且还占用了服务器上的大量空间。

我想拥有的是:

request to sign in:

user: {

//fields

}

request to endpoint1 with parameter user id

projects: [{

// fields

}]

request to endpoint2 with parameter project id

tasklist: [{

// fields

}]

request to endpoint3 with parameter tasklist id

tasks: [{

// fields

}]

这将使更新客户端进行任何更改变得更容易,同时使api尽可能处于无状态状态(除了会话和安全性内容外,我不希望服务器内存中的任何数据)。

我知道一种方法是删除实体并以纯sql样式进行操作,但这意味着我失去了诸如级联和数据完整性之类的休眠功能。

我在这里有什么选择?如果实体关系或数据库设计有误,请赐教。

提前致谢 :)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值