Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Dynamic Arrays, мнение экспертов:) 
:(
    Опции темы
z-END
  Дата 13.6.2004, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



Имеется такая структура:
Код
ThePages = Record
        Accessed: TDateTime;
        PageID: Word;
        {...}
 end;

TheUser = Object
       SID: String[64];
       IP: TheIP;
       Referrer: String;
       Browser: TheBrowser;
       Entered: TDateTime;
       Pages: Array of ThePages;
       function SessionDuration: Integer;
       {...}
       procedure CleanUp;  //обнуляет массив Pages
 end;

TheLog = Object
   private
      {...}
   public
      Visitors: Array of TheUser;
       {...}
      procedure OpenLog (ADir: String); // считывает данные из файлов лога и создает масив Visitors
      procedure CloseLog; // выполняет Visitors[xx].CleanUp; и обнуляет массив Visitors.
end;

var
 Log: TheLog;
{...}
Как нетрудно было догадаться, ета структура является счетчиком посетителей на сайте:
Log - хранит в себе динамический массив Visitors в котором, в свою очередь хранится вся инфа о каждом посетителе, и динамический массив Pages, хранящий в себе информацию о просмотре страниц данным посетителем (точнее сказать таких массивов типа Pages - 5 видов, в зависимости от страниц на которых он "тусуется")

А собственно вопрос такой:
допустим (в среднем) в день 50 посетителей, каждый просматривает 25 страниц, ну и например логи собираются год...
Влезет ли все это в память?! ну и вообще есть ли здесь какие-либо подводные камни?


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Vex
Дата 13.6.2004, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


кацапосрачмученiкъ
****


Профиль
Группа: Экс. модератор
Сообщений: 3103
Регистрация: 28.3.2002
Где: strawberry fields

Репутация: 1
Всего: 88



Цитата
Влезет ли все это в память?!


Проще, ИМХО, сохранить в файл.

Ты расчитываешь на то, что твоя программа будет работать около года непрерывно? - выбрось эту затею из головы.


--------------------
Слава Україні.
PM   Вверх
z-END
Дата 13.6.2004, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



Vex
сорри возможно я неправильно выразилсяsmile.gif суть такая:
посредством FTP я скачиваю записанные моим скриптом логи, логи такого вида:
visitors.log - данные о каждом послетителе
pagesXX.log - страницы им просмотренные, где XX - один из 5 видов

Программа естественно работать год не будет, ну час отсилыsmile.gif а вот логи накапливаются 24 часа в сутка 356(или сколько их там) дней в году, поэтом я и спришиваю:
после того как пройдет год сбора логов влезут ли все они в память?!



--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Vex
Дата 13.6.2004, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


кацапосрачмученiкъ
****


Профиль
Группа: Экс. модератор
Сообщений: 3103
Регистрация: 28.3.2002
Где: strawberry fields

Репутация: 1
Всего: 88



Цитата
после того как пройдет год сбора логов влезут ли все они в память?!


Если много человек лучше не надо, если не хочешь StackOverflow. Надо уложиться по-моему в 64 КБайта.


--------------------
Слава Україні.
PM   Вверх
Albinos_x
Дата 13.6.2004, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



Полностью согласен с Vex.

Сам посчитай, что при твоих данных, только количество просматриваемых страниц будет 1250. Следовательно, в день это будет собирать, приблизительно, 320000 байт (минимум).
А в год !!!......111,39 мешка (если не висакосный). А если если ещё добавить инфу о 50 посетителях!!!

Влезть-то, влезет, но....





--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
<Spawn>
Дата 13.6.2004, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Даже если их будет много, то зачем из все в память то записывать? Можно ведь по частям файл читать. Да и вообще для такой затеи я бы маленькую базу сделал. При более менее правильной нормализации таблиц, у тебя и места вся инфа занимать меньше будет.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Cashey
Дата 13.6.2004, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

Репутация: 2
Всего: 60



Полностью согласен с <Spawn>, такие вещи надо хранить в базе, и если нужно быстро запросом вытащить данные по конкретному (или всем) посетителям (ведь не нужно же обязательно хранить в памяти данные о пользователи, которйы сейчас не в сети)


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
Albinos_x
Дата 13.6.2004, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



Так же согласен. Необходимое можно подгружать, по вызову, из базы данных, где всё и хранить. Уж 200 мешков для этой цели на винте можно выделить.


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
x77
Дата 13.6.2004, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 19
Всего: 22



насчёт базы - не уверен. работать с базой через инет - то ещё удовольствие. и далеко не факт, что провайдер откроет у себя нужный порт, как правило, это не делается. т.е. по любому придётся организовывать репликацию. причём, удалённую. и ради чего - двух таблиц? я бы не стал.

просто клал бы всё это в типизованный файл, организовал по нему поиск, выборку с фильтром и т.д.


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
Albinos_x
Дата 13.6.2004, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



Тоже вариант.


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
z-END
Дата 13.6.2004, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



Всем огромное спасбо. начет БД я тоже против, и дело не в том что сеть, просто для ее работы нужна BDE а меня это по многим причинам неустраивает, а вот загружать только тот кусок логов, который нужен, это хорошая идея.. так наверно и поступлю.


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
<Spawn>
Дата 13.6.2004, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



nJIaKca.spb Кроме БДЕ много чего еще есть smile.gif И необязательно именно через сеть работать с базой, можно копировать файло на локал и оттуда юзать, ты же все равно собирался все логи на комп перегонять и будет тебе более компантное хранение + быстрый способ доступа к нужным данным с небольшими затратами памяти


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
z-END
Дата 13.6.2004, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



<Spawn> я чесно говоря кроме BDE ничего и незнаю withstupid.gif да и вообще в БД несилен, так что делать буду таким способом:
1. скачать логи
2. опередлить нужный блок данных (например статистику посещений за январь)
3. считать из логов данные удовлетворяющие п.2
...
так вроде все должно работать и "влезть" в память должно.


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
x77
Дата 13.6.2004, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 19
Всего: 22



nJIaKca.spb, я бы просто сделал типизованный файл. получал очередную порцию логов и добавлял в него. а потом пробегал через тот же TFileStream, например, и начитывал в динамический массив того же типа, что файл, нужные записи.



--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
z-END
Дата 13.6.2004, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



x77 тоесть предлагаешь файлы которые я скачиваю(visitors.log, pages.log и т.п.) конвертировать в типизированный под мой пост №1, и работать через него?
а есть ли смысл если
Цитата
procedure OpenLog (ADir: String);
делает ето сразу из логов (конвертирует Apache и моих скриптов логи) в динамический массив. если так будет быстрее работать, тогда стоит. A будет ли?!


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Vex
Дата 13.6.2004, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


кацапосрачмученiкъ
****


Профиль
Группа: Экс. модератор
Сообщений: 3103
Регистрация: 28.3.2002
Где: strawberry fields

Репутация: 1
Всего: 88



у тебя есть сервер, там есть логи, заморачиваться с базами данных на стороне сервера ты не хочешь, но хочешь делать выборку по некоторым параметрам. Тогда оптимальный вариант, как тут сказали, скачивай логи на локальную машину и используй простенькую базу данных, по времени это займет не больше, чем ответ в данный топик smile.gif


--------------------
Слава Україні.
PM   Вверх
z-END
Дата 13.6.2004, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



Vex я нето чтобы нехочу заморачиваться с БД на сервере, я просто боюсь скрипты переписывать т.к. сайт уже вовсю работает, а я со своими переделками его как грохну на недельку блин, меня же по швам пустятsmile.gif а в текущих скриптах все очень похоже на Apache log, тока данных напорядок побольше.
Ну вроде как все вопросы выяснены. всем еще раз спасибо. inlove.gif
Думаю тему можно закрывать...


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Unregistered
Дата 17.6.2004, 06:06 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Кучу логов можно интерпретировать как базу данных, необходимо только, как сказал Vex, организовать выборки из них. Все эти функции оформляешь в веб-серверное приложение и по хттп получаешь сгенеренную страничку с нужной инфой. Преимущества очевидны...
  Вверх
z-END
Дата 17.6.2004, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



Приемущества?! ты о чем?! самый оптимальный вариант - ежедневно (еженедельно) скачивать логи,
ты только представь себе если мне надо будет поучить детальный отчет по просмотрам определенной страницы за год... сколько данных с сервака ко мне пойдет ? и еще для этого нужно быть он-лайн, а если мне эти данные надо будет где-то показать где нет инета?!


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Cheba
Дата 17.6.2004, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pointless one
***


Профиль
Группа: Vingrad developer
Сообщений: 1777
Регистрация: 27.11.2003
Где: /dev/null

Репутация: 1
Всего: 62



Цитата
если мне эти данные надо будет где-то показать где нет инета?!

Прости, но разве тебя до сих пор не научили сохранять страницы в броузере? А по поводу размера ты, пожалу, прав. Но если по-умному написать серверную чать, то можно получать только нужные данные. Я вот что-то сомневаюсь, что тебе понадабится инфа о каждом клике на сайте за весь год.
PM MAIL ICQ   Вверх
Unregistered
Дата 18.6.2004, 08:02 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А ты сам представь себе, что у тебя нет инета и нужно показать данные за последние 5-минут? Или представь, что у тебя винт крякнул, и срочно нужно посмотреть данные за тот же год? Можно еще представить, что бен ладен захватил вашу серверную и требует стереть все твои логи. Если ты предполагаешь подобные вещи, то скорее всего прогу ты не закончишь никогда (против лома нет приема). А при правильной организации фильтров и при наличии нет-а или доступа к вашей локальной сети моя схема будет работать на ура хоть за год хоть за два на любой машине и, возможно, даже быстрее чем локальная обработка логов. Кроме того, как сказл Cheba, что тебе мешает кэшировать свои страницы?
  Вверх
_vova_
Дата 19.6.2004, 02:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 18.6.2004
Где: Харьков

Репутация: нет
Всего: нет



Была аналогичная проблема (WinGate анализатор лог'ов).
И только SQL нас спасет.
Периодически делать импорт из лог'ов в БД (текущие лог'и обрабатывать налету).
Сервер БД - MySQL, время работы - 2 года, юзверов >= 200.
Выборка все про всех около 10 сек.

P.S. БДЕ при кол-ве записей > 100000 безбожно тормозит.
PM MAIL   Вверх
z-END
Дата 19.6.2004, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



я нехочу делать по принципу запрос_на_сервер->генерация_на_сервере->вывод_результата_клиентом по двум причинам:
1. На сервере отсутсвует поддержка MySQL
2. Время работы скрипта ограничено 0,3 сек, а как написал _vova_ обработка около 10 сек. это уже непрокатит.
Всвязи с этим я решил логи записывать в таком виде:

Серверная Часть
1.файл visitors.log:
Цитата
|08.06.04
|19:07:18
|SID=505e42de39c3c623513dc68f191afee1
|IP=195.19.14.78
|FROM=http://www.yandex.ru/yandpage?....
BROWSER=Mozilla/5.0 (Windows; U; WinNT4.0; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)|

в него записываются все данные о каждом посетителе
2. файл pages.log:
Цитата
|09.06.04|20:47:09|SID=505e42de39c3c623513dc68f191afee1|PAGE=QUERY|FILE=1086799628|

здесь хранится данные о просмотре каждым посетителем страниц (привязка по SID)
3. файлы типа some_product.log:
Цитата
|10.06.04|11:10:59|SID=1d83d4cf1d8a500b254c063f3c9f1928|2_13|

таких файлов несколько видов, в них хранится информация о том какой товар просматривал посетитель (привязка по SID) собсвтенно код товара здесь (2_13)

Клиентская Часть
использовал запись (ее приводил в первом посте)
работает таким способом:
при открытии лога указываются период выборки, и считываются из логов удовлетворяющие данным условиям, и все это выводится так:
1. данные о посетителях (TTreeView)
UserID
-> IP
-> (данные из pages.log)
-> (данные из some_products.log)
-> номер заказа(если есть)
2. графики (TDecisionGraph) по каждому вида товара
3. график (TDecisionGraph) переходов с сайтов
4. список слов из поисковиков

Это конечно далеко не самый лучший вариант, но времени думать особо небыло, поэтому пришлось делать так, но я уже понял что мне надо будет переделвыать все это чудо.
Пока мысли такие:
1. Не использовать запись вообще, а считывая из логов сразу сторить дерево посетителей и графики.
2. Выбирать что надо просмотреть, (напрмер график только по одному виду товара, или вобще только по одному товару).

Конечно-же все это будет на порядок больше тормозить, зато проблемм с нехваткой памяти быть недолжно.

ЗЫ я согласен с большинством, что надо логи в БД так еще проще, но в как раз в этой сфере я "0" sad.gif


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Cheba
Дата 19.6.2004, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pointless one
***


Профиль
Группа: Vingrad developer
Сообщений: 1777
Регистрация: 27.11.2003
Где: /dev/null

Репутация: 1
Всего: 62



Цитата
Время работы скрипта ограничено 0,3 сек

Странное какое-то ограничение...
PM MAIL ICQ   Вверх
z-END
Дата 20.6.2004, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



Cheba
неповеришь, щас сунулся в документацию хостера, и ... ничего не нашел по ограничению работы скрипта, но блин незря же я на localhost устанавливал на 0,3 (хотя скорее всего у провайдера 3 секунды я брал с запасомsmile.gif


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Cheba
Дата 20.6.2004, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pointless one
***


Профиль
Группа: Vingrad developer
Сообщений: 1777
Регистрация: 27.11.2003
Где: /dev/null

Репутация: 1
Всего: 62



Не знаю как на IIS, но в PHP дефолтовое значение таймаута выполнения скрипта 30 сек. И вряд ли кто-то его сильно урежет. Максимум до 20 сек могут уменьшить, но это делают только жадные хостеры.
PM MAIL ICQ   Вверх
z-END
Дата 20.6.2004, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



про IIS я сам ниче не знаю на Apache+PHP живу, а вот у моего "жадного" хостера стоит ограничение в 3 секунды, кроме того у них SAFE_MODE, и много чего еще хорошегоsad.gif


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Cheba
Дата 21.6.2004, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pointless one
***


Профиль
Группа: Vingrad developer
Сообщений: 1777
Регистрация: 27.11.2003
Где: /dev/null

Репутация: 1
Всего: 62



Беги ты от такого хостера.
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0711 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.