Модель данных - moevm/nosql2h19-indoor GitHub Wiki

1. Схема базы данных

2. Список сущностей модели

Модель данных содержит следующие сущности:

  • Комната:

    • Идентификатор комнаты
    • Владелец комнаты
    • Коордионаты комнаты(X и Y)
    • Этаж комнаты
  • Путь:

    • Идентификатор пути
    • Коордионаты комнаты(X и Y)
    • Этаж комнаты

3. Описание базы данных

База данных Neo4j

3.1 Графическое представление

3.2 Описание назначения коллекций, типов данных и сущностей

  • Room -- хранит сведения о комнате
  • Way -- хранит сведения о пути до нужной комнаты

3.3 Оценка удельного объема информации, хранимой в базе данных

Пусть UID занимает 12 Б, символ - 4 Б, целое число - 8 Б.

  • Room: 12 + 4l + 3 * 8, где l - длина строки
  • Way: 12 + 3 * 8, где l - длина строки

Расчетная формула чистого размера:

N(Room(12 + 4l + 3 * 8) + Way(12 + 3 * 8)), где N - число возможных путей. Возьмем l = 10, Way = 3, Room = 12 Получаем чистый размер без учета загрузки изображения: s1 = 1020N Посчитаем размер с учетом вложенных документов:

  • Way: 76
  • Room: 36
  • Chain 24 Получаем фактический размер БД: s2 = N(24 + 12 * 76 + 3 * 36) = 1044N

3.4. Избыточность модели

Oтношение и разность чистого и фактического объемов:

s2/s1 = 1.02 s2 - s1 = 20N

На путь приходится около 20 байт дублирующих данных, а фактический объем БД больше размера данных в 1.02 раз

3.5. Направление роста модели при увеличении количества объектов каждой сущности

Линейная зависимость: 1044N

3.6. Запросы к модели, содержащиеся в сценарии использования приложения

3.6.1. Выдать имена жителей дома, живущих выше второго этажа и их этаж.

MATCH (n:Room) 
WHERE n.Floor > 2
RETURN n.Owner, n.Floor;

3.6.2. Статистика по длине связей между путями.

MATCH (n:Way)-[a:Chunk]-(b:Way)
WITH abs(n.X-b.X) AS X, abs(n.Y-b.Y) AS Y
RETURN n.ID, b.ID, sqrt(X*X+Y*Y);

4. База данных SQL

4.1 Графическое представление

4.2 Описание назначения коллекций, типов данных и сущностей

  • Таблица Room -- хранит сведения о комнате
  • Таблица Way -- хранит сведения о пути до нужной комнаты
  • Таблица Chain -- хранит сведения о связях Поля X, Y, Floor реализует связь многие-ко-многим

4.3 Оценка удельного объема информации, хранимой в базе данных (id берем 4 байта)

  • Room 32
  • Way 28
  • Chain 8
Чистый объем: s1 = N(384 + 36 + 8) = 428N Фактический объем: s2 = 480N ## 4.4. Избыточность модели s2 / s1 = 1.12; s2 - s1 = 52; На каждый путь приходится 52 байт, фактический объем больше в 1.12 раз

4.5. Направление роста модели при увеличении количества объектов каждой сущности

Линейная зависимость: 480N

4.6. Запросы к модели, содержащиеся в сценарии использования приложения

4.6.1. Выдать имена жителей дома, живущих выше второго этажа и их этаж.

select Room.Owner as Owner, Room.Floor as Floor
from Room
where Floor > 2
group by Owner

4.6.2. Статистика жителей второго этажа, которые попадают в диапазон 10 метров от точки (10,10).

select (*) from Room
where Room.Floor == 2 and (Room.X < 20 and Room.X > 0) and (Room.Y < 20 and Room.Y > 0)
group by Owner

4.6 Сравнение моделей SQL и NoSQL

SQL требует больше памяти, нежели Neo4J в нашем случае. Так же преимуществом Neo4J является способ хранения данных в одной коллекции, благодаря чему легко получить доступ к данным по одному запросу, не используя несколько таблиц, в отличие от SQL

⚠️ **GitHub.com Fallback** ⚠️