Skip to content
jabbervorx edited this page Jun 29, 2013 · 2 revisions

В данном проекте мы не будем использовать традиционные SQL базы, считаю их слишком громоздкими для нашего случая. Таким образом, все данные, которые мы будем хранить, должны укладываться в схему ключ-значение. Ключом будет некоторая строка, значением будет JSON-структура. Как вариант тут была бы интересен XML, но если мы не будем применять все его описания схем, валидацию и прочее, то смысла в нём нет.

Описание ключей

Общая структура

Каждый ключ представляет собой запись в доменном стиле или в имейл-стиле. Начальным доменом всегда выступает собственный домен сервера. Например, наш сервер называется mat.im, тогда все внутренние ключи имеют ".mat.im" в качестве суффикса. По крайней мере в логическом плане, в практическом, конечно, не стоит "мусорить", в базе этот суффикс можно смело опустить. Но, когда в какой-то записи встречается какое-то поле, значением которого является ключ в базе, то там должен присутствовать полный домен. Например, если у нас есть описание какой-то группы и в ней встречаются пользователи как с нашего, так и с других серверов, то они указываются полной доменной записью.

$word.domain.im -- ключ, возвращающий список

$record@$word.domain.im -- ключ, возвращающий одну запись

Пользователи

users[.domain.im] -- список всех пользователей. Необходимо право "администратор" или "видеть всех пользователей".

open_profile@$user.users[.domain.im] -- открытый профиль пользователя, что он пожелал опубликовать для всех

roster@$user.users[.domain.im] -- ростер, доступен только пользователю

Константная часть .domain.im не хранится в базе в наборе ключей. Далее буду опускать её в записях.

Группы

groups -- список групп. Обычные пользователи видят только открытые группы и те, в которых они являются членами, чтобы видеть все, необходимо право "администратор".

$group@groups -- аттрибуты группы. Открытая/закрытая и прочие. Необходимо право "администратор" или "владелец".

$group.groups -- список участников группы. У группы могут быть подгруппы. Необходимо право "администратор" или "участник".

Use Case: Есть группа "разработчики", они разбиты на подгруппы "проект1", "проект2" и прочие. Один разработчик увольняется -- автоматически удаляется из всех подгрупп.

$subgroup.$group.groups

Рум

rooms

$room@rooms -- аттрибуты комнаты. Необходимо право "администратор" или "владелец".

$room.rooms -- список участников. Возможны перечисления как отдельных пользователей, так и групп. Участники могут быть как с одного сервера так и с нескольких. Необходимо право "администратор" или "участник".

Файлы

Файлы могут принадлежать пользователею, группе или Руму.

rooms.files

groups.files

users.files

Clone this wiki locally