Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 13, 2013 21:37:02

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Помогите с выбором оптимального решения задачи

Всем привет

Есть задача:

Нужно парсить логи клиента, забирать результат себе, хранить его и анализировать.

Подробности задачи:

1) Парсить нужно чем-то простым, чтобы не требовало предустановки доп. ПО. (у клиентов Windows)
2) Инфы придётся парсить немало, возможно за один раз от 2 до 10 Гбайт(она хранится в обычных текстовых файлах, правда там есть данные в бинарном виде :) на выходе инфы получается не много, с 25Мб всего 53Кб )
3) Полученную информацию после парсинга, нужно забрать у клиента и положить в своё хранилище(чтобы потом им можно было воспользоваться не один раз)
4) Из хранящейся информации нужно брать срезы и анализировать(выборка информации по определённым объектам, за определённое время, постоение графиков и подобное)
3-4 пункты будут делать люди неимеющие отношения к программированию, т.е. это тоже должно быть достаточно просто и с дружественным интерфейсом.

Как я вижу решение и как я могу его реализовать:

1) Напишу скрипт для парсинга и скомпилирую его с помощью cx-freeze
2) Инфу скрипт будет собирать в sqlite3
т.е. клиенту нужно просто положить скрипт рядом с логами, запустить его, а потом отдать файл с БД

3-4 пункты я думаю реализовать на Django, так как, не вижу более простого способа предоставить простой и дружественный интерфейс. Использовать думаю встроенный dev-сервер, чтобы пользователи не мучались, а одной командой запускали его(пользоваться инфой будут только внутри компании).
Например в админке можно указывать путь к файлу БД sqlite3, нажимать Ок, и инфа будет переливаться в нашу MySQL. А на главной страничке можно разместить интерфейс для возможности задавать параметры срезов инфы, графиков и прочее.

3-4) Забираем у клиента файл БД полный инфы.
Аналитик запускает dev-сервер Django, переливает инфу от клиента в общую БД MySQL. Переходит на главную страницу для работы с инфой из БД.

Покритикуйте, подскажите, как оптимальнее решить такую задачу.



Отредактировано Budulianin (Ноя. 13, 2013 21:50:59)

Офлайн

#2 Ноя. 13, 2013 22:49:25

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

Помогите с выбором оптимального решения задачи

Budulianin
dev-сервер Django
можно еще bottle.py если ничего сложного

Офлайн

#3 Ноя. 13, 2013 23:09:32

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Помогите с выбором оптимального решения задачи

Singularity
можно еще bottle.py если ничего сложного
Привет. Да, что-то забыл про существование микро веб-фрейморков, заюзать подобный будет интересно, наверно буду что-то из подобного использовать вместо Django.
Спасибо

А что на счёт других пунктов? Правильно думаю?



Отредактировано Budulianin (Ноя. 13, 2013 23:11:57)

Офлайн

#4 Ноя. 14, 2013 15:10:56

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Помогите с выбором оптимального решения задачи

Я бы с cx-freeze не парился, питон поставить не сложно, а при парсинге отправлял бы данные сразу на сервер.
Для отчетов заюзал бы svg-либу (http://raphaeljs.com/ или аналоги). Хранил бы все в MongoDB (тут кому какая БД нравится).
Bottle.py - норм. Джанго тут наверно излишен.

Офлайн

#5 Ноя. 14, 2013 17:26:48

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Помогите с выбором оптимального решения задачи

o7412369815963
Привет, спасибо за ответ.

o7412369815963
Я бы с cx-freeze не парился
Надобность сборки на cx-freeze есть, чтобы исключить такой случай, когда клиенту нельзя ставить на сервер какое-то доп ПО. Понимаю, что глупо звучит, но так мне ответили, когда я предложил использовать БД на стороне клиента, вместо файлов :) менеджер не бум-бум. Из-за этого и sqlite3. Видимо такие случаи есть. Ну вот чтобы не беспокоить клиента лишний раз, собираю cx-freeze и sqlite3 использовать собираюсь.

o7412369815963
при парсинге отправлял бы данные сразу на сервер.
Дело в том, что под это дело никто ничего разворачивать не собирается, так как, сбор данных будет происходить нечасто, но объём за раз будет обрабатываться немалый. Исходя из этого и принимать некуда, если по сети передавать, поэтому, как вариант - таскать файл БД от клиента.

o7412369815963
Хранил бы все в MongoDB
Я думаю хранить всё в sqlite3, с учётом её возможностей, она вполне пригодна + проста. Некому следить за mongo, а sqlite3 валяется на диске и трудностей не создаёт.

o7412369815963
Джанго тут наверно излишен.
Согласен

o7412369815963
Для отчетов заюзал бы svg-либу (http://raphaeljs.com/ или аналоги)
спасибо за подсказку, возьму на вооружение



Отредактировано Budulianin (Ноя. 14, 2013 17:32:40)

Офлайн

#6 Ноя. 14, 2013 19:12:39

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Помогите с выбором оптимального решения задачи

Budulianin
клиенту нельзя ставить на сервер
1. Помоему ему и не надо ничего на сервер ставить, он ведь у себя на машине питон запускает.
2. Запустить питон можно и без его установки.
Я также считаю что возня с cx_freeze абсолютно излишняя.

Из описания непонятно что происходит с логами после парсинга. Надо помечать какая часть прочитана ? или вы все заботы о повторениях свалите на центральную базу и не обращаете внимания на повторный парсинг логов?

По поводу базы - то сильно зависит от того какие запросы будут. Для хранения логов и базы есть специальные.

http://en.wikipedia.org/wiki/Time_series_database
http://en.wikipedia.org/wiki/Operational_Historian



Офлайн

#7 Ноя. 15, 2013 00:09:17

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Помогите с выбором оптимального решения задачи

doza_and
Привет, спасибо за ответ

doza_and
1. Помоему ему и не надо ничего на сервер ставить, он ведь у себя на машине питон запускает.

Логи на сервере лежат.

doza_and
2. Запустить питон можно и без его установки.
:) знаю я

doza_and
Я также считаю что возня с cx_freeze абсолютно излишняя.
Почему вы так против cx_freeze? Я использую его, только из-за того, что работа будет под виндой и Python там нет, а его предустановка вызовет дополнительные проблемы для клиента.
Может cx_freeze зло, а я не знаю ? :)

doza_and
Из описания непонятно что происходит с логами после парсинга.
Там написано:
3) Полученную информацию после парсинга, нужно забрать у клиента и положить в своё хранилище(чтобы потом им можно было воспользоваться не один раз)

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

Каждый файл имеет имя даты создания + префикс, если файл достиг определённого размера и в этот же день нужно создать ещё один. Т.е. имя уникально. Может быть имена пропарсенных файлов в бд хранить?

doza_and
По поводу базы - то сильно зависит от того какие запросы будут. Для хранения логов и базы есть специальные.
Спасибо, не знал. Хранимые данные достаточно простые. Никакой нагрузки на неё не будет

Если сделать одну таблицу, то запись из неё:
[ modul_name, func_name, start_time, stop_time, incoming_time, fio_user ]

Потом по этим данным нужно вычисления делать: min max avr delta amount

Это достаточно простая задача, таких специализиорванных БД для неё не нужно



Отредактировано Budulianin (Ноя. 15, 2013 00:25:38)

Офлайн

#8 Ноя. 15, 2013 07:31:27

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Помогите с выбором оптимального решения задачи

Budulianin
Может быть имена пропарсенных файлов в бд хранить
Если логи мелко нашинкованы, то это лишнее, вы ведь легко можете запросить дату последних обновлений и построить имя файла лога. Просто иногда логи это просто огромные 1-2 файла, и повторный разбор создаст излишнюю нагрузку.
Budulianin
Логи на сервере лежат.
Ну это не означает что пользователи не могут их читать. Фильтр ведь они со своей машины будут запускать?

Budulianin
по этим данным нужно вычисления делать: min max avr delta amount

Выбор базы вопрос удобства (с оставлением лазеек для развития). Базы для временных рядов как раз и содержат встроенные функции для эффективного вычисления min max avr delta, интерполяции прореживания … :) Но они могут оказаться неудобны для построения других запросов.

По поводу зла cx_freeze. Оно есть, но не очень велико.
1 при добавлении новых приложений вы постоянно копируете питон, причем разные версии и на разные машины - получается страшный бардак.
2 Теряете время на работу с cx_freeze не получая по сути никаких преимуществ.
3 Я считаю что пользователю будет сложнее. Большинство приложений он ставит при помощи setup.exe, а тут вы пришли и говорите, надо скопировать в директорию с логами.. и еще не забудьте и… ну и так далее. Не теряйте лицо - сделали программу делайте setup и пускай администраторы решают как его запускать, они за это и получают зарплату.



Офлайн

#9 Ноя. 15, 2013 09:48:40

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Помогите с выбором оптимального решения задачи

Budulianin
Я думаю хранить всё в sqlite3, с учётом её возможностей, она вполне пригодна + проста. Некому следить за mongo, а sqlite3 валяется на диске и трудностей не создаёт.
Budulianin
3) Полученную информацию после парсинга, нужно забрать у клиента и положить в своё хранилище
Я имел ввиду БД сервера (“своё хранилище”), а не “клиентскую” БД.

Budulianin
Исходя из этого и принимать некуда
Как некуда? А сервер отчетов на bottle.py где будет лежать итоговая БД, туда и отправлять сразу.

И вообще под подобные задачи пусть отдельный сервер выделят (как system requirement). Иначе в топку таких клиентов.

Офлайн

#10 Ноя. 15, 2013 13:03:05

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Помогите с выбором оптимального решения задачи

doza_and
Если логи мелко нашинкованы, то это лишнее, вы ведь легко можете запросить дату последних обновлений и построить имя файла лога. Просто иногда логи это просто огромные 1-2 файла, и повторный разбор создаст излишнюю нагрузку.
У этого скрипта не будет связи с общей базой во время работы - запросить не у кого. Либо он должен сам понимать, что брать, а что нет(тогда в его БД нужно что-то класть), либо брать всё, что дают, а общая БД уже будет думать. Можно брать из БД данные последних обновлений, формировать значение и сравнивать его с именем файла логов, таким образом отсеивать ненужные логи.

doza_and
Ну это не означает что пользователи не могут их читать. Фильтр ведь они со своей машины будут запускать?

Дак в том то и дело, что нет :) им всё просто нужно, в каталог положил, запустил и результат отдал. Исходя из этого, такие решения

doza_and
Выбор базы вопрос удобства (с оставлением лазеек для развития). Базы для временных рядов как раз и содержат встроенные функции для эффективного вычисления min max avr delta, интерполяции прореживания … :) Но они могут оказаться неудобны для построения других запросов.

Почитал немного на эту тему. С временными рядами работают ОРСУБД, SQLite среди них. Значит она подходит для подобных задач?

doza_and
2 Теряете время на работу с cx_freeze не получая по сути никаких преимуществ.
Он собирает за пару секунд, а преимущества я описал - клиенту меньше проблем

doza_and
3 Я считаю что пользователю будет сложнее. Большинство приложений он ставит при помощи setup.exe, а тут вы пришли и говорите, надо скопировать в директорию с логами.. и еще не забудьте и… ну и так далее. Не теряйте лицо - сделали программу делайте setup и пускай администраторы решают как его запускать, они за это и получают зарплату.

Ну тут Вы уже напридумывали ерунды :) или не поняли, что это не продукт массовый, а конкретно для одного клиента. Какое приложение? Это маленькая утилита, и подобные ей на винде, часто имеют один exeшник. Клиент(может вы не поняли, админы будут скрипт запускать, клиент это организация) платит за то, чтобы за него решали проблему, как можно проще. От него просто требуется положить утилиту в логи, запустить и отдать результат, ВСЁ. А вот всякие установщики и подобное, это уже лишние проблемы для него.



Отредактировано Budulianin (Ноя. 15, 2013 13:29:43)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version