0

祝大家早日/晚安。

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

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

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

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

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

如果达到此限制之一,我们想通知学生帐户他已达到限制并且不能再上传附件或图片。

student_comments 存储为

@Lob
public String comment;

附件、照片和草稿存储为

private byte[] data;

不幸的是,我的教授说他将来可能想更改限制,因此我们需要以一种以后可以轻松更改(即增加)的方式对这些限制进行编码。

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

问候,

ķ

4

1 回答 1

1

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

bytea可以使用该octet_length函数获取字段的大小(以字节为单位) 。

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

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

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

于 2013-08-17T14:01:51.407 回答