| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Новости на файлах |
| Автор: cccr85 13.7.2010, 15:07 |
| Всем привет, встала задача сделать новости на файлах. Для начала определимся что имеем, и что нужно будет делать с новостями. Новость состоит из заголовка, и текста, он же html. Так же у каждой новости есть дата публикации, по этой дате начинается ее показ, к тому же у новости есть модификатор, показывать, или не показывать. Нам надо: 1. Выводить новости по несколько штук, по сколько не известно, и может поменяться в процессе. 2. Создавать новость, при этом нужно указывать дату с которой можно эту новость выводить. 3. Изменять новость, удалять, скрывать, открывать. Как я думаю поступить, создам папку /datanews/ в нее положу файл all.news в котором будут содержаться мета информация по новостям(какая, дальше), а так же файлы 1.news 2.news и так далее. Формат файла all.news такой: createDate|id_news!activ итого получаем 10 символов дата + 5 символов ид + 1 символ статус новости + 2 символа разделители + 4 символа переход на новую строку = 22 символа 1 запись новости = 22 байта. Для ид новости мы взяли 5 символов, получаем максимум 99999 новостей, 99999*22/1024/1024 ~ 2.01 мегабайта. сто тысяч новостей это очень много. Теперь какие я вижу проблемы при работе функций, вывод все понятно, читаем файл, формируем массив, получаем нужные ид, и вуаля у нас есть новости. Создание тоже не представляет проблем, достаточно вставить запись в начало файла. Изменение новости, ну с текстом и заголовком все понятно, быстро и бесшумно, а вот как быть если поменяли дату новости, если поменяли статус новости, удалили новость, это ведь придется туда сюда переписывать файл. А если админ неправильный, и будет менять через каждые пару секунд, не комильфо в общем. А может не изменять весь файл, а просто вставлять строчку с тем же ид в начало файла, но уже с другим показателем activ(0-показывать, 1-скрывать, 2-удаленна) и датой, тогда нам всего лишь придется чуть модифицировать создание массива при чтении, чтобы для новости с одним ид учитывалась только ближайшая к началу файла строчка. + нужно будет раз в неделю/месяц оптимизировать файл всех новостей, удалять лишние файлы, оптимизировать ид. Много файлов в одной папке тоже не гуд, по этому мы будем хранить по 100 файлов в каждой. Для этого файлы 1.news 2.news и т.д. мы будем размещать в под папках. Например если ид новости меньше 100, то папка 0, если ид новости с 100 до 199 то папка 1, если ид новости от 200 и до 299 то папка 2, и так далее. Получаем 99999 / 100 = 1000 папок. Многовато.. Поэтому будем хранить по 250 файлов в папке, получим ~ 400 папок, и в каждой 250 файлов. Я думаю нормально. Как думаете, есть ли в моих расчетах ошибки? З,Ы, бд не предлагать, сайты совсем маленькие, и бд будет лишней. |
| Автор: skyboy 13.7.2010, 17:15 |
sqlite |