Пагинация страниц: архитектура07.01.2023, 14:16. Показов 4104. Ответов 55
Вроде, сделал пагинацию. На файлах. Можно изменить максимальный размер файлов пагинации, тогда, при записи очередного сообщения, вначале будет пере-пагинация, т.е. файлы с сообщениями будут, возможно, сформированы заново, а потом в последний файл будет добавлено сообщение. Т.е. можно управлять "динамически" максимальным размером файлов. Ну, и т.д.
Но, вот вопрос. О счетчике общего количества сообщений. Он у меня - только в последнем файле (т.е. там, где содержатся последние сообщения). Понятно, что при добавлении очередного сообщения он будет увеличен на 1. При удалении - уменьшен на 1. Здесь все без проблем. НО: как быть, если сообщение будет удалено не из последнего файла пагинации, а из ЛЮБОГО? Пока вижу такие возможные варианты: 1. При каждом удалении сообщения обязательно корректировать счетчик сообщений (а это - лишняя операция с последним файлом пагинации, т.е. доп. нагрузка на сервер). Впрочем, удаление старых сообщений (из предыдущих файлов пагинации) делается не столь часто... 2. Реализовать счетчик сообщений в дополнительном (маленьком) подключаемом файле. Но, это - лишний файл в файловой системе севера для КАЖДОЙ страницы, у которой имеются файлы пагинации с сообщениями. Как-то тоже - такое себе решение... Хотя, если эти файлы будут храниться где-то в отдельном каталоге - может, почему бы и нет?... 3. Хранить количество сообщений не только в последнем, но и во всех файлах пагинации для соответствующей страницы (в каком-нибудь теге). Но, это еще хуже, чем п.1, 2, т.к. при очередном добавлении/удалении сообщения придется вносить изменения не только в последний, но и во все файлы пагинации (ну, или, для экономии, применить аналогию метода кворума при репликации, только в рамках одного сервера). 4. Создать нечто типа "базы данных" (может, даже на MySQL) по всем веб-страницам сервера и "проиндексировать" их, в том числе, по количеству сообщений. Т.е. расширенный аналог п.2. Правда, при этом придется каждый раз при добавлении/удалении сообщений вносить изменения в этот файл, а он, конечно, будет достаточно большим. Т.е. гораздо хуже по производительности, чем п.1, 2. А какой еще м.б. вариант? Добавлено через 14 минут Мне кажется, способы по п.1, 2 будут наиболее производительными при текущей работе с сообщениями (добавить/исправить/удалить). Но, способ по п.4 - более функционален, т.к. в одном файле будет храниться вся управляющая информация по всем вебстраницам. А это удобно, например, при выводе всех сообщений одного или группы пользователей, при управлении ими. А если по п.2 - это придется просматривать ВСЕ файлы с сообщениями (ибо пользователь мог оставить сообщение где угодно, где сможет). Это - ОЧЕНЬ затратно. Добавлено через 28 минут Например, пусть есть условные 30.000 страниц на сервере. Соответственно, на каждую из них, в среднем, 3 условных файла пагинации с сообщениями. Объем каждого из них, например, не более 100 кБ. В итоге, оставляли сообщения 10.000 пользователей. По каждому пользователю хранится информация (ник, пароль, т.д.) в общем объеме не более 1 кБ. Общий объем файла управляющей информации (по п.4) составит не более 10.000*1 = 10.000 кБ = 10 МБ. Если же по п.1, 2, то при выводе всех сообщений одного пользователя придется, в общем случае, просматривать 30.000*3 = 90.000 файлов пагинации. Объем данных, среди которых придется искать то, что относится к конкретному пользователю, составит до 90.000*100 = 9000.000 кБ. На это потратится очень много времени. Т.е., похоже, п.1,2 - нереальны для мало-мальски серьезного сайта. Быстрее просмотреть 10 МБ в ОДНОМ файле, чем 9 ГБ, да еще в разных. Добавлено через 1 час 6 минут Да плюс к тому, все равно придется просматривать те файлы пагинации, где есть сообщения этого пользователя. Добавлено через 28 минут Т.е. выходит, что п.3, 4 - слишком затратны, а выигрыша в дополнительной функциональности не дают. Из п.1, 2 в среднем наиболее быстрый - это п.1. С учетом того, что удаление старых сообщений происходит достаточно редко. Если иного варианта не будет, пожалуй, на нем.
0
|
||
| 07.01.2023, 14:16 | |
|
Ответы с готовыми решениями:
55
Не срабатывает условие при смене страниц(пагинация страниц) Постраничная пагинация + бесконечный скроллинг страниц Пагинация страниц без добавления разрыв страниц |
|
5515 / 1198 / 164
Регистрация: 16.01.2023
Сообщений: 2,851
|
|||
| 25.02.2023, 10:20 | |||
|
Если вы воспринимаете файл буквально, что это некий контейнер, вы его открываете, последовательно считываете, последовательно пишите - я скажу сразу. Это полный бред для 90% задач. Если вы не понимаете этого сразу - вы поймете это чуть позже, когда начнете сталкиваться с проблемами. Если у вас файлы структурированы и есть некоторый программный код, который управляет этой структурой - поздравляю, вы "изобрели" базу данных. Есть уже готовые решения (некоторые хорошо себя зарекомендовали, некоторые - не очень). Вы можете идти своим путем. Собирать все те же грабли, на которые люди уже наступали тысячи раз. Бороться с ними. В одиночку вы не сможете разработать хорошее функциональное универсальное решение. Но опыт получите бесценный. Добавлено через 2 минуты У нас nginx - и в качестве балансировщика нагрузки (ну точнее несколько nginx-серверов), и статику он отдает, и архивы он же отдает (он умеет их на лету формировать). Ну а для всего остального - Apache и PHP.
0
|
|||
| 25.02.2023, 10:32 [ТС] | |||||
|
А вот для уточнения контента на странице - там включается в работу РНР (например, для работы с сообщениями). Или если нужно сделать статистику, карту сайта, отправка оповещений, административные функции, т.д. - тоже РНР. Добавлено через 9 минут
0
|
|||||
|
Заблокирован
|
||
| 25.02.2023, 10:56 | ||
|
0
|
||
|
5515 / 1198 / 164
Регистрация: 16.01.2023
Сообщений: 2,851
|
||||
| 25.02.2023, 11:39 | ||||
|
Основной минус неструктурированного хранения данных - вам нужно читать файлы последовательно, пока не найдется нужная запись. У вас простая операция непоследовательного чтения превращается в сложный квест. Почитайте, например, про связные списки и хеш-таблицы. В нашем примере у вас связный список, а субд - хеш-таблица. Ну это если очень примитивно.
0
|
||||
|
1460 / 1013 / 232
Регистрация: 01.10.2018
Сообщений: 3,943
|
||
| 25.02.2023, 13:39 | ||
|
Добавлено через 1 минуту Если об этих особенностях не упомянуть, то представление о сайте будет неполным. Другое дело, что лучше избегать таких конструкций.
1
|
||
|
5515 / 1198 / 164
Регистрация: 16.01.2023
Сообщений: 2,851
|
||
| 25.02.2023, 13:48 | ||
|
0
|
||
|
1460 / 1013 / 232
Регистрация: 01.10.2018
Сообщений: 3,943
|
|
| 25.02.2023, 13:50 | |
|
0
|
|
|
5515 / 1198 / 164
Регистрация: 16.01.2023
Сообщений: 2,851
|
||
| 25.02.2023, 14:03 | ||
|
Формируем статическую html-страницу. В настройках веб-сервера (например для Apache можно создать правило в .htaccess) прописываем, что при обращении к странице /help/payment или /help/warranty - отдаем эти страницы (не запуская php-интерпретатор, не подключаясь к БД и т.д.).
0
|
||
|
1460 / 1013 / 232
Регистрация: 01.10.2018
Сообщений: 3,943
|
||
| 25.02.2023, 14:18 | ||
|
0
|
||
|
Заблокирован
|
||
| 25.02.2023, 14:21 | ||
|
0
|
||
|
5515 / 1198 / 164
Регистрация: 16.01.2023
Сообщений: 2,851
|
||
| 25.02.2023, 14:27 | ||
|
У нас, например, проекты все сидят в кубере, перед ними балансировщик. Статика тоже имеется, но она тоже в контейнерах (разумеется у каждого контейнера - N подов). Веб-сервер в контейнере, он решает отдавать статику или запускать приложение.
0
|
||
|
1460 / 1013 / 232
Регистрация: 01.10.2018
Сообщений: 3,943
|
|||
| 25.02.2023, 14:35 | |||
|
Добавлено через 7 минут
2
|
|||
|
Заблокирован
|
||
| 25.02.2023, 15:03 | ||
|
Добавлено через 14 минут estic, спасибо за совет. Я уже сбегал и проверил на сайте Конечно, изменений в скорости я не заметил, но доверюсь тебе.
0
|
||
|
1460 / 1013 / 232
Регистрация: 01.10.2018
Сообщений: 3,943
|
|||
| 25.02.2023, 15:28 | |||
|
Добавлено через 5 минут
1
|
|||
|
Заблокирован
|
||
| 25.02.2023, 15:37 | ||
|
0
|
||
| 25.02.2023, 15:37 | |
|
Яша и пагинация страниц Кастомная пагинация страниц Пагинация, создание массива страниц Обычная пагинация или пагинация на ajax Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|