Социальный граф - SuperLight2/ytiservinUi GitHub Wiki
- Граф состоит из вершин, соединенных ребрами.
- Каждая веришна хранит уникальный идентификатор uid, тип вершин utype, и набор пар ключ-значение.
- Каждое значение имеет заданный тип хранимых данных: int или str.
- Каждое ребро соединяет пару вершин и задается номерами вершин концов (uid1, uid2) и собственным типом utype, ребро хранит время создания в поле timestamp, поле info, которое является строкой из максимум 255 символов, и флагом удаления deleted.
- Для каждого типа ребра может быть задан обратный тип ребра. Таким образом ребра делятся на три категории: однонаправленные (без обратного тип), двунаправленные (обратный тип совпадает с заданным), ассиметричные (обратный тип не совпадает с заданным).
- При выполнении операций с ребрами, автоматически выполняется соответствующая операция с обратным ребром.
- В качестве хранилища данных используется MySQL база данных.
На графе определены следующие операции:
- Добавить вершину.
- Изменить значение ключа в вершине.
- Удалить вершину.
- Добавить ребро.
- Изменить поле info ребра.
- Удалить ребро.
- Получить число исходящих ребер из вершины.
- Получить список исходящие ребра из вершины с реберным типом с номерами [i, j].
- Получить список исходящие ребра из вершины с реберным типом с timestamp в заданном интервале.
- Все объекты имеют уникальный uid. uid не может повторяться и является абсолютно уникальной величиной. Таким образом по uid можно определить тип объекта.
- При добавлении вершины, генерируется новый уникальный uid.
- Проверка типа значения производится каждый раз при установке значений в вершинах и ребрах.
- Удалить вершину можно при отсутствии смежных ребер. Есть функции для "очистки" вершины.
- При создании ребра проверяется правильность типов концевых вершин.
- Удаление ребер и вершин производится специальной пометкой поля deleted типа boolean. Асинхронный сборщик мусора удаляет такие ребра физически из базы данных.