• Главная
  • Оглавление
  • Обратная связь
  • Лента RSS
  • Правила
Что здесь уже нашли

Автор будет очень признателен, если Вы кликнете по одной из белых ссылок выше.
Вам это ничего не стоит, а автору сайта будет приятно ;)




Найдено страниц: 43 [показано 10]

  1. Файлы vs базы данных.

    Степень соответствия запросу: 85,66%
    Фрагменты текста поста :
    ... Структура такова: allsein — данные о заходах с поисковиков по разным запросам хост | искомая фраза дата, количество заходов... ... хост | искомая фраза дата, количество заходов... ... agent — данные о броузерах и ботах user-agent броузера дата, количество заходов... ... user-agent броузера дата, количество заходов... ... pages — данные о посещенных страницах страница дата, количество заходов... ... страница дата, количество заходов... ... rss_agent — данные о запросах от RSS-ридеров user-agent ридера дата, количество заходов... ... user-agent ридера дата, количество заходов... ... source — данные об источниках трафика URL страницы-источника дата, количество заходов... ... URL страницы-источника дата, количество заходов... ... В качестве дат (видимо для оптимизации) используются целочисленные значения, равные количеству дней, прошедших с некой фиксированной даты (1 января 2000 года)... ... html в определенный день, нужно сперва вычислить сколько дней прошло с 1 января 2000 года до искомой даты, затем «заглянуть» в ячейку массива Пример кода $ar['pages']['/stat... ... При обращении серфера к странице, скрипт собирает всю необходимую информацию (имя страницы, URL страницы-источника, user-agent, дата обращения и т... ... Первая склеивает все элементы массива (разделяя их спец-символами с технической информацией) и возвращает полученную текстовую строку... ... приходится парсить (разбирать) огромный объем текста, выискивая в нем те самые спец-символы, по ним восстанавливать значения исходных ячеек и клеить их в результирующий массив... ... Если искомая ячейка существует и найдена, то значение в ней увеличивается на единицу... ... Первое на что хотелось бы обратить внимание — это тот факт, что подобную структуру не удастся (по крайней мере целиком) уложить в одну таблицу, а это значит будут использованы несколько связанных таблиц ( реляционная структура )... ... При нормальном (читай « грамотном ») подходе тут будут использованы аж три таблицы: в первой будут храниться хосты поисковиков (по одному на запись), во второй — запросы с хостов (каждый запрос в отдельной записи), ну и в третьей — собственно количество посетителей по дням для каждой из искалок по каждому из запросов... ... каждой записи из первой таблицы соответствуют несколько записей из второй, каждой из которых соответствуют несколько записей из третьей... ... :-) Структура, например, такая: Структура таблиц Таблица se_hosts -------------------- ID1 — уникальный числовой номер (используется для связи таблиц) Host — имя хоста поисковика Таблица se_query --------------------- ID2 — уникальный числовой номер (используется для связи таблиц) SH_ID — уникальный номер для ссылки на первую таблицу Query — текст искомой фразы Таблица se_hits ------------------- Q_ID — уникальный номер для ссылки на вторую таблицу Date — кво-дней с 1 января 2000 года Hits — количество хитов за этот день Естественно первая и третья таблицы будут иметь индексы по первым двум полям, а вторая — по всем... ... Итак, сперва производим поиск в первой таблице... ... Если не использовать индексы, то для выполнения этой операции придется провести сравнение имен хоста с содержимым поля Host первой таблицы для части (а в худшем случае всех ) записей... ... Индексный файл содержит копию проиндексированного поля (или полей) из таблицы БД, но в отсортированном виде... ... Весь диапазон значений (количество записей в таблице) делится пополам и сравнение искомого значения происходит со значением поля сразу из середины таблицы... ... Таким образом, одной операцией сравнения мы сразу определяем в какой из половин таблицы находится нужная нам запись, т... ... Затем оставшийся диапазон (половина таблицы) снова делится пополам и все повторяется до тех пор, пока мы не найдем нужную запись, либо убедимся, что ее нет... ... Для примера, в таблице из 100 записей для поиска любого значения в наихудшем случае понадобится всего 7 сравнений... ... Как нетрудно догадаться поиск во второй таблице нам даст уже экономию времени в 15*10 = 150 раз... ... во второй таблице при поиске будет использоваться фильтрация по SH_ID (нам же нужны фразы только с найденного хоста, а не все подряд)... ... Ну и третья таблица — ускорение в 150*10 = 1500 раз... ... Нам нужно загрузить ТОЛЬКО ОДНУ ЗАПИСЬ , а вовсе не всю таблицу... ... В нашем случае размер записи (для третьей таблицы) составляет 12 байт , ведь там только три поля — Q_ID , Date и Hits , каждое из которых представляет собой 32-битное число и занимает 4 байта... ... Естественно, размер записей в первых двух таблицах (а их нам тоже придется загружать в процессе поиска) немного больше, но все равно он измеряется десятками байт , а не мега байт... ... Запись считали, увеличили на единицу и снова записали НА ТОЖЕ МЕСТО в файле таблицы... ... Поскольку записи в нашей третьей таблице (в данном случае) также будут иметь фиксированную длину, то поиск нужной внутри файла также сведется к одному сложению и одному умножению, а уж прочесть и снова записать на тоже место 12 байт — милисекундное дело (даже с учетом автоматической коррекции индексного файла)... ... Да еще про кэширование вспомним :-) Кстати, если ваш сайт достаточно посещаем, то файл статистики будет расти как на дрожжах и каждое обращение к скрипту будет вызывать чтение/парсинг/поиск/сохранение всех этих десятков мегабайт, а при использовании БД при любом количестве посетителей нам все так же будет нужно читать всего несколько сотен байт (три записи из таблиц), а записать - только 12 байт... ... Ну и конечно не забудьте о том, что поиск можно производить не в каждой таблице по отдельности, а сразу во всех, одной командой: Пример запроса SELECT Hits FROM se_hosts, se_query, se_hits WHERE ID1 = SH_ID AND ID2 = Q_ID AND Date = 3085 что еще даст еще больший выигрыш, т... ... записи из первых двух таблиц не нужно будет передавать в скрипт, а мотор СУБД обработает их сам и очень-очень быстро... ... В реальных же реляционных СУБД, где работают десятки (а то и сотни) связанных между собой таблиц этот выигрыш измеряется уже далеко не тысячами... Подробнее: http://fit-media.com/post_1222679684.html


  2. Залепа №9. Microsoft друзей не признает.

    Степень соответствия запросу: 9,45%
    Фрагменты текста поста :
    ... Голуба "Правила программирования в С и С++" (речь идет именно о C++): Цитата: Как-то раз я видел интерфейс, в котором объект "календарь" позволял пользователю интерактивно выбирать дату, щелкая мышью на каком-либо из дней, показанных на изображении календаря... ... "Календарь" затем экспортирует эту дату в другие части программы, помещая ее в объект "дата", который возвращается из сообщения get_date()... ... При выполнении должным образом единственным видимым в других частях программы объектом был бы объект "дата"... ... "Дата" использовала бы объект "календарь" для реализации сообщения "инициализируй_себя" (которое могло бы быть конструктором), но "календарь" бы содержался внутри "даты"... ... Определение класса "календарь" можно было бы даже вложить в определение класса "дата"... ... Объект "дата" также мог бы поддерживать другие инициализирующие сообщения, такие как "инициализируй_себя_от_редактируемого_ввода" или "инициализируй_себя_из_строки", но во всех случаях объект "дата" отвечает за нужное для инициализации взаимодействие с пользовательским интерфейсом... ... Остальная часть программы просто бы непосредственно использовала "дату"... ... никто, кроме "даты", даже бы не знал о существовании объекта "календарь"... ... То есть вы бы объявили "дату" и приказали ей себя инициализировать... ... Затем вы можете передавать объект "дата" всюду, куда необходимо... ... Конечно, "дата" должна также уметь себя вывести, переслать в файл или из файла, сравнить себя с другими датами и так далее... ... Следуя описанному выше работа с классом "дата" должна выглядеть примерно так: Пример кода: CDate cd = new CDate()... ... // создали объект "дата" с текущей датой внутри cd = new CDate("15... ... // сохранили дату в файл cd... ... // прочи дату из файла int days = cd - new CDate("28... ... // получили дату, на год большую исходной int dw = cd... ... // отображение календаря для ввода даты пользователем... ... Итак, упростим задачу до предела: есть класс CDate , представляющий ни что иное как обычную календарную дату... ... Требования к реализации: 1) все операции касающиеся даты, должны выполняться в классе CDate... Подробнее: http://fit-media.com/post_1199568462.html


  3. Идея глобального контента

    Степень соответствия запросу: 1,46%
    Фрагменты текста поста :
    ... По теме проектирования баз данных написано множество книг и статей, но все они содержат больше технической информации (описания систем индексации, поиска и связывания таблиц) и предлагают дробить всю информацию на множество таблиц, не забыв склеить все это в тугой узел с помощью связей (relations) и зависимостей... ... Идентификатор родительского элемента сайта ( parent_id - мы же строим иерархическую систему) Заголовок ( title ) Описание ( description ) Краткое содержание ( summary - используется в качестве анонса) Собственно текст старницы ( content ) Ключевые слова ( keywords ) Идентификатор автора ( user_id ) Дата создания ( created ) Дата последнего изменения ( modified ) Флаг опубликованности ( published ) Идентификатор логического раздела ( category ) Вроде ничего не забыл... ... Список полей: Уникальный идентификатор ( id ) Идентификатор статьи с в блоге, к которой относится данный комментарий ( parent_id ) Заголовок ( title ) Собственно текст ( content ) Идентификатор автора ( user_id ) Дата создания ( created ) Флаг промодерированности ( published ) Как видим, поля всё теже, что и для статичной страницы, отличие лишь в количестве... ... Лишь будет иметь одно дополнительное поле: Дата, начиная с которой новость уже не актуальна ( expiried ) Товар в магазине... ... Проанализировав описанное выше, можно легко сделать вывод, что при проектировании CMF логично создать всего одну (большую) универсальную таблицу в базе данных для хранения практически любого вида контента... ... ), то она запросто может сканировать его и строить необходимые для реализации поиска по сайту таблицы... ... Сюда же стоит отнести и возможность отслеживания обновления контента без участия системы оповещения (событий) , а так же и решение многих проблем, связанных с кэшированием... ... БД постоянно будет использовать одну таблицу, а значит часть ее всегда будет торчать в памяти (кэше), соответственно запросы должны выполняться гораздо быстрее... ... форма таблиц БД%%%  ... Подробнее: http://fit-media.com/post_1242742678.html


  4. Залепа №10 Cупер-хренорезка может все. Только хрен не режет.

    Степень соответствия запросу: 1,3%
    Фрагменты текста поста :
    ... Но потом, немного поразмыслив, я пришел к выводу, что это сделано видимо с целью дать программисту возможность отслеживать текущее состояние "свернутости" контрола... ... } и подцепил на него события OnEnter от всех комбо-боксов... ... И, как показывает практика, может оказаться вовсе и не методом, а например свойством или даже событием... ... GetAutoSizeMode возвращает одно из значений перечисления AutoSizeMode , которое содержит всего два таких значения: GrowAndShrink и GrowOnly... ... Никогда бы не подумал, что человеку в здравом уме придет в голову использовать строчку ввода даты как площадку для размещения дополнительных элементов управления... ... Видимо я старею, не поспеваю за прогрессом, отстаю от жизни, а все нормальные кодеры уже давно пихают туда таблицы, прогресс-бары и кнопки всех мастей... ... Свойство HasChildren возвращает логическое значение, точно определяющее, есть ли у нас дочерние контролы али нет таких... ... Эти два свойства предназначены видимо для тех мега-программеров, которые осилили учебник языка C# только до раздела "События", а дальше - забили... ... если разработчик знает, что такое события и как отследить изменение размеров окна, то для него потребность в этих свойствах никогда не возникнет... ... Ну и под конец два гениальных события: ContextMenuChanged и CursorChanged... ... Хоть убейте, но практического применения этим событиям я придумать не могу... Подробнее: http://fit-media.com/post_1202303173.html


  5. Залепа №12. Microsoft не знает собственного кода.

    Степень соответствия запросу: 0,7%
    Фрагменты текста поста :
    ... Безусловно, чем больше различных свойств, методов и событий предусмотрели для класса его создатели, тем более гибок он будет в использовании... ... Обратим свое внимание на набор обрабатываемых любым контролом событий, связанных с клавиатурой... ... Для решения проблемы разработчики и ввели событие OnKeyPress... ... Фактически оно наступает, когда в буфер клавиатуры попадает очередной символ и обработчик этого события получает как раз код символа, а не клавиши... ... Соответственно это событие не наступает для нажатий/отпусканий таких клавиш как Shift , Alt , Ctrl , F1 - F12 , Tab и т... ... } } Как видно из примера, для такой простой вещи, как удаление из потока заведомо лишних символов, требуется писать обработчики для сразу ДВУХ событий, да еще и переменную использовать... Подробнее: http://fit-media.com/post_1203179184.html


  6. Урок информатики для мелкософта (пояснение к залепе №8)

    Степень соответствия запросу: 0,5%
    Фрагменты текста поста :
    ... Значение переменной a складывается с значением переменной b и результат заносится в переменную c... ... Ну, а если этот объект представляет собой, например, таблицу из базы данных, который, вдобавок ко всему сказанному, при инициализации будет устанавливать соединение с этой самой БД и загрузку данных из нее, отъедая не только память и процессорное время, но еще и канал связи... ... после инициализации в строке (2), значение c... ... x так же как и значение a... ... Это подтверждается вторым выводом значений переменных... Подробнее: http://fit-media.com/post_1198760520.html


  7. Хроники одной лаборатории

    Степень соответствия запросу: 0,35%
    Фрагменты текста поста :
    ... Так что установку он забиpает, если до вечеpа не начнется войны... ... Ждали войну... ... Дали пpочесть... ... Подбиpали волну, фазу и фоpму импульса... ... Пpогpамма упpавления дала сбой... ... Опять сдала подстанция... ... Занимаемся пучковым оpужием по пpогpамме звездных войн... Подробнее: http://fit-media.com/post_1231685617.html


  8. Залепа №1. Убогий TreeView.

    Степень соответствия запросу: 0,21%
    Фрагменты текста поста :
    ... Первое, что приходит на ум для реализации столь "сложного" поведения - это перехватить моменты начала и завершения редактирования узлов дерева с динамической подменой значений... ... Вроде все просто, благо и события подходящие предусмотрены... ... Проблема в том, что обработчики событий имеют одну малеееееенькую недоработку... ... Обработчик события TreeView... ... Почему бы не дать возможность программе в этом обработчике не только просигналить пользователю о точ, что введенные данные неверны, но и попытаться самой исправить юзеровские ошибки и нормально продолжить работу... Подробнее: http://fit-media.com/post_1197402793.html


  9. AJAX — WEB 2.0 за 5 минут

    Степень соответствия запросу: 0,21%
    Фрагменты текста поста :
    ... html (но вы, естественно, можете дать любое имя)... ... } Первой командой мы считываем значение атрибута value из нашего поля ввода и сохраняем его в переменной nnn, а второй командой вызываем наш серверный скрипт с передачей ему считанного имени и занесением ответа в наш контейнер... ... Писать код, считывающий все эти значения, чтобы передать их скрипту &mdash... ... Теперь он будет получать два значения: имя пользователя и его возраст и возвращать приветствие и год рождения пользователя (текущий год минус возраст)... ... Первая будет вызвана перед началом отправки данных (в данном примере она покажет alert-окно с надписью 'start uploading'), а вторая &mdash... Подробнее: http://fit-media.com/post_1262093659.html


  10. Залепа №6. Вечный календарь и пляска с бубном.

    Степень соответствия запросу: 0,15%
    Фрагменты текста поста :
    ... Ситуация: Есть некоторое событие, достаточно жестко привязанное к конкретным датам... ... Причем метки можно ставить аж трех разных типов, включая ежемесячные события... ... К слову сказать, диапазон у этого календаря тоже удовлетворит любого - он умеет работать с датами до 9999 года, так что очередная "проблема 3000" нам уже не грозит... ... Причем не просто одинаково, а написаны тем же шрифтом, что и обычные даты, только слегка жирненьким... Подробнее: http://fit-media.com/post_1197894841.html


История внешних поисковых запросов

Меню

  • Главная страница
  • Оглавление блога
  • Лента новостей
  • Обратная связь
  • Правила блога

Анонсы по темам

  • Все посты блога
  • С миру по нитке
  • Мысли вслух
  • Графика и фото
  • Кривизна платформы .NET
  • Грамотные интерфейсы
  • WEB-программирование
  • FlatCMS - шустрая и гибкая
  • Доработки Lasto-блога

Категории

  • Все посты по порядку
  • С миру по нитке
  • Графика и фото
  • Кривизна платформы .NET
  • Грамотные интерфейсы
  • WEB-программирование
  • FlatCMS - шустрая и гибкая
  • Доработки Lasto-блога

Сервисы

  • Поиск по блогу
  • Поиск по всему сайту
  • Шпионское досье

Реклама


Стоимость сайта

Мой вебсайт стоит 865 404,18 руб

Статистика

    Widgetize!
  • Время работы: 0,72430 сек.
  • Память: 17 664 кБт
  • Статистика привратника
Copyright FIT-Media.com, © 2007-2010
Главная | Общее оглавление | Обратная связь | Правила блога | Лента RSS