Data Model - moevm/nosql2018-mongo_routing GitHub Wiki
Нереляционная модель данных (MongoDB)
Графическое представление модели данных
Описание назначений коллекций, типов данных и сущностей
Way - хранит данные о путях.
- id (ObjectID - 12 бит) - идентификатор пути;
- nodes [] (ArrayOfObjectID - 12*n) - id точек, которые задают путь;
- tags {} (String - 32 бит) - теги пути
- coordinates [] (Double 64*2 бит) - координаты точки
Оценка удельного объема информации, хранимой в модели
-
Среднее количество тегов = 100;
-
Среднее количество nodes = 100
-
Среднее количество relation = 100
-
Size (way) = 12+12100+32100 = 16412 бит
Size = 16412*n
Реляционная модель данных
Графическое представление модели данных
Описание назначений коллекций, типов данных и сущностей
6 коллекций: 1-ая Way - хранит данные о путях.
- id () - идентификатор пути;
- tags id - id тегa пути
2-ая Node - хранит точки
- id - идентификатор точки;
- x - координата х
- y - координата у
- tags id - id тегa пути
3-я Relation - хранит отношения
- id - идентификатор точки;
- tags id - id тегa пути
4-ая Member - хранит данные об участниках
- id - идентификатор участника;
- relation id - идентификатор отношения
- type - хранит тип
- ref - хранит ссылку на id участника отношения
- role - роль участника отношения
5-ая NodesWay
- id - идентификатор
- way id - идентификатор пути;
- node - точки;
6-ая Tags
- id - идентификатор
- tags id - идентификатор тега
- key - ключ тега
- val - значение тега
Оценка удельного объема информации, хранимой в модели
-
Среднее количество тегов = 100;
-
Среднее количество nodes = 100
-
Среднее количество relation = 1000000
-
Среднее количество member = 10000000
-
Size (nodes) = 152
-
Size (way) = 88
-
Size (NodesWay) = 36
-
Size (Way) = 24
-
Size (Relarion) = 24
-
Size (Member) = 100
Size = (10088 + 12 + 100(88 + 88100) + 100100) * n
Запросы к бд:
'{ "insert" : "nodes", "ordered" : true, "$db" : "test", "documents" : [{ "_id" : 242978990, "geometry" : { "type" : "Point", "coordinates" : [53.8071477, 30.9732332] }, "tags" : [{ "addr:country" : "BY" }, { "addr:district" : "Чаусский район" }, { "addr:region" : "Могилёвская область" }, { "int_name" : "Čavusy" }, { "name" : "Чаусы" }, { "name:be" : "Чавусы" }, { "name:be-tarask" : "Чавусы" }, { "name:de" : "Tschawussy" }, { "name:en" : "Chavusy" }, { "name:fr" : "Tchavoussy" }, { "name:lt" : "Čavusai" }, { "name:pl" : "Czausy" }, { "name:prefix" : "город" }, { "name:ru" : "Чаусы" }, { "name:uk" : "Чауси" }, { "place" : "town" }, { "population" : "10505" }, { "population:date" : "2018-01-01" }, { "source:population" : "Белстат" }, { "wikidata" : "Q955113" }, { "wikipedia" : "ru:Чаусы" }, { "wikipedia:de" : "Tschawussy" }, { "wikipedia:en" : "Chavusy" }, { "wikipedia:fr" : "Tchavoussy" }, { "wikipedia:pl" : "Czausy" }] }] }
'{ "insert" : "ways", "ordered" : true, "$db" : "test", "documents" : [{ "_id" : 205321810, "tags" : [{ "addr:housenumber" : "8" }, { "addr:street" : "2-й Строительный переулок" }, { "building" : "yes" }, { "building:levels" : "1" }], "points" : [{ "_id" : 2152973027, "geometry" : { "type" : "Point", "coordinates" : [53.8118113, 30.9579473] } }, { "_id" : 2152973030, "geometry" : { "type" : "Point", "coordinates" : [53.8118708, 30.9580087] } }, { "_id" : 2152973026, "geometry" : { "type" : "Point", "coordinates" : [53.8117938, 30.9582221] } }, { "_id" : 2152973024, "geometry" : { "type" : "Point", "coordinates" : [53.8117344, 30.9581606] } }, { "_id" : 2152973027, "geometry" : { "type" : "Point", "coordinates" : [53.8118113, 30.9579473] } }] }] }'
db.node.find(
{
location:
{ $near:
{
$geometry: { type: "Point", coordinates: [ -73.9667, 40.78 ] },
$minDistance: 1000,
$maxDistance: 5000
}
}
}
)
db.way.find(
{
nodes.location:
{ $near:
{
$geometry: { type: "Point", coordinates: [ -73.9667, 40.78 ] },
$minDistance: 1000,
$maxDistance: 5000
}
}
}
)
db.relation.find({member:{ref: 1}})