-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
#7 - Описание нереляционная модели данных для neo4j #7
Comments
Нереляционная модельОписание назначений коллекций, типов данных и сущностейУзлыPatient - узел с одноимённым классификационным признаком Patient, описывающий аккаунт зарегистрированного пользователя. Имеет следующие атрибуты key-value:
Appeal - узел с одноимённым классификационным признаком Appeal, описывающий запрос на составление анамнеза зарегистрированного пользователя. Имеет следующие атрибуты key-value:
Symptom - узел с одноимённым классификационным признаком Symptom, хранящий информацию об определённом симптоме. Имеет следующие атрибуты key-value:
Disease - узел с одноимённым классификационным признаком Disease, хранящий информацию об определённом заболевании. Имеет следующие атрибуты key-value:
Analysis - узел с одноимённым классификационным признаком Analysis, хранящий информацию об определённом анализе. Имеет следующие атрибуты key-value:
СвязиCreate - связь с одноимённым классификационным признаком Create, описывающая принадлежность узла Appeal к узлу Patient. Позволяет получить по определённому пользовательскому аккаунту сделанные с него обращения. Belong - связь с одноимённым классификационным признаком Belong, описывающая принадлежность узла Patient к узлу Appeal. Позволяет получить по определённому обращению пользовательский аккаунт, с которого оно было сделано. Contain - связь с одноимённым классификационным признаком Contain, описывающая принадлежность узла Symptom к узлу Appeal. Позволяет определять симптомы, введённые в конкретном обращении. Confirm - связь с одноимённым классификационным признаком Confirm, описывающая принадлежность узла Analysis к узлу Symptom. Позволяет определять анализы, которые помогли бы выявить конкретный симптом. Predict - связь с одноимённым классификационным признаком Predict, описывающая принадлежность узла Appeal к узлу Disease. Позволяет получить и обработать симптомы, введённые в данные обращении и симптомы, характеризующие болезнь, для последующей подборки рекомендуемых анализов. Describe - связь с одноимённым классификационным признаком Describe, описывающая принадлежность узла Disease к узлу Symptom. Содержит атрибут weight, указывающий на корреляцию между данными симптомом и болезнью. Позволяет определять заболевания, характеризующиеся данным симптомом. Cause - связь с одноимённым классификационным признаком Cause, описывающим принадлежность узла Symptom к узлу Disease. Содержит атрибут weight, указывающий на корреляцию между данными симптомом и болезнью. Позволяет определять симптомы, набор которых характеризует данное заболевание. Оценка объема информации, хранимой в моделиПредположим, что
Будем считать, что каждый символ у нас занимает 2 байта в связи с использованием русского языка. Общий объём каждого узлаPatient:
::Итого: 851 байт:: Appeal:
::Итого: 8 байт:: Symptom:
::Итого: 1100 байт:: Disease:
::Итого: 2100 байт:: Analysis:
::Итого: 100 байт:: СвязиDescribe:
::Итого: 4 байта:: Cause:
::Итого: 40 байта:: Таблица 1 - расчёт "чистого" объёма данных (в байтах)
Таким образом, получаем следующую функцию от количество пользователей N: Избыточность моделиТеперь учитываем, что бд Neo4j пользуется такими элементами, как узел и связь, а также позволяет накладывать такие метаданные, как классификационные метки. С учётом этого посчитаем фактический размер получающейся базы данных. Patient:
::Итого: 873 байт:: Appeal:
::Итого: 29 байт:: Symptom:
::Итого: 1122 байт:: Disease:
::Итого: 2122 байт:: Analysis:
::Итого: 123 байт:: СвязиCreate:
::Итого: 37 байт:: Belong:
::Итого: 37 байт:: Contain:
::Итого: 38 байт:: Confirm:
::Итого: 38 байт:: Predict:
::Итого: 38 байт:: Describe:
::Итого: 43 байт:: Cause:
::Итого: 40 байт:: Таблица 1 - размер всех коллекций (в байтах)
Получаем следующую функцию от количество пользователей N: Таким образом, коэффициент избыточности модели будет равен Направление роста модели при увеличении количества объектов каждой сущностиУвеличение количества узлов типа Patient приводит к линейному росту, равному собственному размеру данной сущности. Таким образом, рост составит f(n) = 873n байт. Увеличение количества узлов типа Appeal приводит к появлению связей следующий типов: Create, Belong, Contain и Predict. В худшем случае, пользователь введёт все симптомы, которые будут характеризовать все заболевания. Таким образом, рост составит f(n) = (29 + 2 * 37 + 133 + 41) * n = 277 байт. Увеличение количества узлов типа Symptom может привести к росту взвешенных связей типов Describe и Cause, а также к росту связей с определёнными анализами. В худшем случае, будем считать, что симптом свяжется со всеми анализами и заболеваниями. Таким образом, рост составит f(n) = (1122 + 41 * (43 + 40) + 133 * 38) * n = 9579 байт. Увеличение количества узлов типа Disease может привести к росту взвешенных связей типов Describe и Cause. В худшем случае, будем считать, что заболевание свяжется со всеми симптомами. Таким образом, рост составит f(n) = (2122 + 133 * (43 + 40)) * n = 13161 байт. Увеличение количества узлов типа Analysis может привести к росту связей типа Confirm. В худшем случае, анализ будет позволять определять любой симптом. Таким образом, рост составит f(n) = (123 + 133 * 38) = 5177. Примеры хранения данных в БД для моделиПользователь и его обращение╒══════════════════════════════════════════════════════════════════════╤══════════════════════════════════════════════════════════════════════╤═════════╕
│n │m │r │
╞══════════════════════════════════════════════════════════════════════╪══════════════════════════════════════════════════════════════════════╪═════════╡
│(:Patient {password: "securepassword123",sex: true,weight: 75,fullname│(:Appeal {Date: "30.10.2024"}) │[:CREATE]│
│: "Иванов Иван Иванович",email: "iiivanov@etu.ru",age: 30,height: 180}│ │ │
│) │ │ │
├──────────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────────┼─────────┤
│(:Appeal {Date: "30.10.2024"}) │(:Patient {password: "securepassword123",sex: true,weight: 75,fullname│[:BELONG]│
│ │: "Иванов Иван Иванович",email: "iiivanov@etu.ru",age: 30,height: 180}│ │
│ │) │ │
└──────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────────────┴─────────┘ Болезнь и её симптомы╒════════════════════════╤═══════════╤═══════════╕
│r1 │n1.name │n2.name │
╞════════════════════════╪═══════════╪═══════════╡
│[:DESCRIBE {weight: 10}]│"Лихорадка"│"Простуда" │
├────────────────────────┼───────────┼───────────┤
│[:CAUSE {weight: 10}] │"Простуда" │"Лихорадка"│
├────────────────────────┼───────────┼───────────┤
│[:DESCRIBE {weight: 10}]│"Озноб" │"Простуда" │
├────────────────────────┼───────────┼───────────┤
│[:CAUSE {weight: 10}] │"Простуда" │"Озноб" │
├────────────────────────┼───────────┼───────────┤
│[:DESCRIBE {weight: 10}]│"Кашель" │"Простуда" │
├────────────────────────┼───────────┼───────────┤
│[:CAUSE {weight: 10}] │"Простуда" │"Кашель" │
└────────────────────────┴───────────┴───────────┘ Экземпляр болезни{
"identity": 2,
"labels": [
"Disease"
],
"properties": {
"name": "Простуда",
"description": "Клинический синдром острого воспаления верхних дыхательных путей, затрагивающего преимущественно нос и возникающего из-за неспецифической острой респираторной инфекции. В воспаление могут быть вовлечены горло, гортань и пазухи. Обычно термин применяется в отношении симптомов, связанных с воспалением, и используется наряду с фарингитом, ларингитом, трахеитом и другими, употребляется в отношении острой респираторной вирусной инфекции верхних дыхательных путей и является традиционным для обозначения лёгких случаев заболевания верхних дыхательных путей. Термин широко используется в англоязычной литературе, в русскоязычной вместо него обычно используется более общий термин острой респираторной вирусной инфекции."
},
"elementId": "4:108d56d7-54c8-4bb9-ac55-3588861a3984:2"
} Экземпляр пациента{
"identity": 3,
"labels": [
"Patient"
],
"properties": {
"password": "securepassword123",
"sex": true,
"weight": 75,
"fullname": "Иванов Иван Иванович",
"email": "iiivanov@etu.ru",
"age": 30,
"height": 180
},
"elementId": "4:108d56d7-54c8-4bb9-ac55-3588861a3984:3"
} Примеры запросовРегистрация пользователяMerge (:Patient {fullname: "Иванов Иван Иванович", email: "iiivanov@etu.ru", password: "securepassword123", sex: True, age: 30, height: 180, weight: 75}) Количество запросов для совершения UseCase: 1 Количество задействованных коллекций: 1 Создание обращенияmatch (p: Patient {fullname: "Иванов Иван Иванович"})
match (s1:Symptom {name: "Озноб"})-[:DESCRIBE]->(d1)
match (s2:Symptom {name: "Лихорадка"})-[:DESCRIBE]->(d2)
match (s3:Symptom {name: "Кашель"})-[:DESCRIBE]->(d3)
merge (p)-[:CREATE]->(a: Appeal {date: "24.05.2023 15:31:16"})-[:BELONG]->(p)
merge (d1)-[:PREDICT]->(a)-[:CONTAIN]->(s1)
merge (d2)-[:PREDICT]->(a)-[:CONTAIN]->(s2)
merge (d3)-[:PREDICT]->(a)-[:CONTAIN]->(s3) Количество запросов для совершения UseCase: 1 Количество задействованных коллекций: 4 Получение статистики распространённости симптома среди пациентовmatch (a:Appeal)-[:BELONG]->(p: Patient)
where "20.05.2023" < a.date and a.date < "27.05.2023" and p.sex = True
RETURN a Количество запросов для совершения UseCase: 1 Количество задействованных коллекций: 2 |
Необходимо расписать модель данных в соответствие со следующими пунктами:
A. Графическое представление модели (ER-диаграмма)
B. Описание назначений коллекций, типов данных и сущностей
C. Оценка объема информации, хранимой в модели (сколько потребуется памяти, чтобы сохранить объекты, как объем зависит от количества объектов - нужно выразить через переменную (количество одного из видов объектов вашей БД)). У вас должна получится формула - зависимость объема от одной переменной.
D. Избыточность модели (отношение между фактическим объемом модели и «чистым» объемом данных).. У вас должна получится формула - зависимость избыточности от одной переменной.
E. Направление роста модели при увеличении количества объектов каждой сущности.
F. Примеры хранения данных в БД для модели (два подраздела «Примеры данных»).
G. «Примеры запросов» - запросы к модели, с помощью которых реализуются сценарии использования
i. Текст запросов
ii. Количество запросов для совершения юзкейсов в зависимости от числа объектов в БД и прочих параметров
iii. Количество задействованных коллекций (если есть)
Готовое задание прикрепить в файле с разметкой markdown (,md) к данному тикету.
Дедлайн: 26 октября 2024
The text was updated successfully, but these errors were encountered: