hibernate和postgresql的数据库空间配额限制了每个用户使用的数据库兆字节数



祝大家晚安。

在我们的大学项目中,我们有一个由hibernate(使用postgresql)创建的数据库,该数据库有17个表(obejct)。我们需要发布最多4个对象,即student_emments、student_attachments、student_drafts、student_fotos

  1. 将学生发布的评论数量限制为每个学生1000条,并且他们在数据库中的组合大小不应超过40 MB。

  2. 将student_attachments限制为每个学生最多120 MB,即学生可以发布任何数量的附件,但其组合大小不应超过120 MB的空间。

  3. 与student_attachments对象的限制相同,但它们的组合大小应限制为80 MB

  4. 相同但限制应为每个学生50MB。

如果达到了其中一个限制,我们想通知学生帐户,他已经达到了限制,不能再上传附件或图片了。

student_emments存储为

@Lob
public String comment;

附件、fotos和草稿存储为

private byte[] data;

不幸的是,我的教授说,他可能想在未来改变限制,所以我们需要对这些限制进行编码,以便以后可以很容易地改变,即增加。

这个问题是针对所使用的最佳实践,即使用hibernate和postgresql解决问题的最佳方案是什么?我怀疑这只能在文件系统级别上完成,而不能在postgresql上完成,但如果使用postgres可以实现目标,请让我知道我应该搜索什么关键词。

问候,

K

通过查看文件系统无法回答这个问题,必须编写SQL查询。

bytea字段的字节大小可以通过octet_length函数获得。

如果hibernate对二进制内容使用大对象(通过oid类型引用),则需要使用PostgreSQL中获取lobject大小中建议的自定义lo_size(oid)函数。

有了正确的函数,您就可以聚合大小来计算各种内容类型的每个学生的使用情况。

此外,如果您需要在插入时强制执行配额,则应在事件之前触发的函数中计算配额,以便在达到超过配额限制时能够取消操作。

最新更新