Социальный граф - SuperLight2/ytiservinUi GitHub Wiki

  • Граф состоит из вершин, соединенных ребрами.
  • Каждая веришна хранит уникальный идентификатор uid, тип вершин utype, и набор пар ключ-значение.
  • Каждое значение имеет заданный тип хранимых данных: int или str.
  • Каждое ребро соединяет пару вершин и задается номерами вершин концов (uid1, uid2) и собственным типом utype, ребро хранит время создания в поле timestamp, поле info, которое является строкой из максимум 255 символов, и флагом удаления deleted.
  • Для каждого типа ребра может быть задан обратный тип ребра. Таким образом ребра делятся на три категории: однонаправленные (без обратного тип), двунаправленные (обратный тип совпадает с заданным), ассиметричные (обратный тип не совпадает с заданным).
  • При выполнении операций с ребрами, автоматически выполняется соответствующая операция с обратным ребром.
  • В качестве хранилища данных используется MySQL база данных.

На графе определены следующие операции:

  1. Добавить вершину.
  2. Изменить значение ключа в вершине.
  3. Удалить вершину.
  4. Добавить ребро.
  5. Изменить поле info ребра.
  6. Удалить ребро.
  7. Получить число исходящих ребер из вершины.
  8. Получить список исходящие ребра из вершины с реберным типом с номерами [i, j].
  9. Получить список исходящие ребра из вершины с реберным типом с timestamp в заданном интервале.
  • Все объекты имеют уникальный uid. uid не может повторяться и является абсолютно уникальной величиной. Таким образом по uid можно определить тип объекта.
  • При добавлении вершины, генерируется новый уникальный uid.
  • Проверка типа значения производится каждый раз при установке значений в вершинах и ребрах.
  • Удалить вершину можно при отсутствии смежных ребер. Есть функции для "очистки" вершины.
  • При создании ребра проверяется правильность типов концевых вершин.
  • Удаление ребер и вершин производится специальной пометкой поля deleted типа boolean. Асинхронный сборщик мусора удаляет такие ребра физически из базы данных.