Квоты пространства базы данных с Hibernate и Postgresql, ограничение мегабайт базы данных, используемых на пользователя
Добрый день / ночь всем вам.
В нашем университетском проекте у нас есть база данных, созданная hibernate (используя postgresql), имеющая 17 таблиц (obejct). Нам нужно разместить ограничение на 4 объекта, т.е. student_comments, student_attachments, student_drafts, student_fotos
ограничить количество комментариев, оставленных студентом, до 1000 на одного студента, а размер их комбайна в базе данных не должен превышать 40 МБ.
ограничить student_attachments максимум 120 МБ на одного студента, т.е. студенты могут публиковать любое количество вложений, но размер их комбайна не должен превышать 120 МБ.
то же ограничение, что и для объекта student_attachments, но размер их объединения должен быть ограничен до 80 МБ
то же самое, но ограничение должно составлять 50 МБ на студента.
в случае достижения одного из этих ограничений мы хотели бы сообщить учащемуся, что он достиг предела и больше не может загружать вложения или изображения.
Комментарии студентов хранятся как
@Lob
public String comment;
а вложения, фотографии и черновики хранятся в виде
private byte[] data;
К сожалению, мой профессор сказал, что он может захотеть изменить пределы в будущем, поэтому нам нужно кодировать эти ограничения таким образом, чтобы впоследствии их можно было легко изменить, т.е. увеличить.
Этот вопрос касается использования передового опыта, то есть, что было бы лучшим решением нашей проблемы с использованием hibernate и postgresql? Я подозреваю, что это можно сделать только на уровне файловой системы, а не на postgresql, но если цель может быть достигнута с помощью postgres, пожалуйста, дайте мне знать, какое ключевое слово мне нужно искать.
С Уважением,
К
1 ответ
На это нельзя ответить, посмотрев на файловую систему, SQL-запросы должны быть написаны.
Размер в байтах bytea
поле может быть получено с octet_length
функция.
Если hibernate использует большие объекты (ссылки через oid
тип) для двоичного содержимого, вы должны использовать самоопределение lo_size(oid)
функция как предложено в разделе Получение размера объекта в PostgreSQL.
Имея нужные функции, вы можете затем агрегировать размеры, чтобы вычислить использование для каждого учащегося для различных типов контента.
Если, кроме того, вам необходимо применить квоты на вставку, они должны быть вычислены в функциях, которые TRIGGERed ДО события, чтобы можно было отменить операцию при достижении предела превышения квоты.