--- aliases: tags: - зрелость/🌱 date: - - 2024-03-19 zero-link: - "[[00 Архитектура ПО]]" parents: linked: --- Нам нужно выяснить всё о данных в вашем проекте. Всё - это вообще всё. Примеры вопросов: - Какие есть данные? - Как они связаны друг с другом? - Сколько данных каждого типа? - Какие минимальные, максимальные и средние размеры у данных каждого типа? - Сколько актуальных данных? - Как определяется актуальность данных? - Как быстро растёт объём данных? - Как часто данные читаются? ## Какие у нас есть данные? Нам нужно составить схему движения данных внутри вашего проекта. Простой пример - пользователь публикует текстовый пост в френдленту. Вопросы, ответы на которые вы должны получить у менеджера проекта (или прикинуть самим, мы обычно прикидываем сами и предлагаем менеджеру или заказчику конкретное значение): - Какого размера может быть пост? Минимальный, максимальный и средний размер? / Кстати, ограничениедолжно быть, ограничения есть всегда и это не спроста / - Сколько постов может быть у одного пользователя? - Сколько в среднем у пользователя постов? - Как часто пользователь может публиковать посты? - Сколько постов публикуется в день? - Сколько всего постов в системе? - Как долго должны храниться посты? - Можно ли прочитать архивные посты? - Сколько всего пользователей в системе? - Сколько в среднем у пользователя друзей? - Сколько максимум у пользователя друзей? - Как быстро пользователь должен увидеть свой пост? - Как быстро пользователь должен увидеть пост друга в своей френдленте? - Как сортируются посты в френдленте друзей? В сухом остатке, вы должны точно понимать, что у вас есть за данные, какие эти данные, как эти данные изменяются. ## Как данные будут использоваться? Знать всё о своих данных, предполагает также знание о том, как эти данные будут использоваться. Причём обо всех вариантах использования. Написать такую систему хранения, которая позволит любое использование и обработку данных в высоконагруженной системе, строго говоря, невозможно. Показ данных пользователю - это тоже использование, причём использование, которое обладает одним критичным свойством - в случае, если мы проектируем с вами веб-систему, то показ данных пользователю должен быть максимально быстрым. Пользователь не будет ждать. Мы должны придумать такую схему хранения данных, которая позволит максимально быстро обработать ЛЮБОЙ запрос пользователя.