искать способ, связанный с дизайном базы данных - PullRequest
0 голосов
/ 17 февраля 2011

Я работаю в системе анализа журналов, которая читает журнал tomcat и отображает его в виде диаграммы / таблицы на веб-странице. (Я знаю, что существует какая-то система анализа журналов, я воссоздаю колесо. Но это моя работа, мой босс хочет этого.)

Наш лог tomcat сохраняется по дням. Например:

2011-01-01.txt
2011-01-02.txt
......

Вот мой способ экспортировать журналы в БД и читать их:

1 Структура БД

У меня есть три таблицы: 1) log_current: сохранить сгенерированные сегодня журналы.

2) log_past: сохранить журналы, созданные до сегодняшнего дня.

Приведенные выше две таблицы принадлежат ОДНОЙ ЖЕ схеме.

+-------+-----------+----------+----------+--------+-----+----------+----------+--------+---------------------+---------+----------+-------+
| Id    | hostip    | username | datasend | method | uri | queryStr | protocol | status | time                | browser | platform | refer |
+-------+-----------+----------+----------+--------+-----+----------+----------+--------+---------------------+---------+----------+-------+
| 44359 | 127.0.0.1 | -        |        0 | GET    | /   |          | HTTP/1.1 |    404 | 2011-02-17 08:08:25 | Unknown | Unknown  | -     |
+-------+-----------+----------+----------+--------+-----+----------+----------+--------+---------------------+---------+----------+-------+

3) log_record: сохранить информацию log_past, она записывает дни, журналы которых были экспортированы в таблицу log_past.

+-----+------------+
| Id  | savedDate  |
+-----+------------+
| 127 | 2011-02-15 |
| 128 | 2011-02-14 |
..................
+-----+------------+

Таблица показывает, что журнал за 2011-02-15 был экспортирован.

2 Экспорт (в дБ)

У меня два графика работы.

1) день работы.

в 00: 05: 00, проверьте каталог журналов tomcat (/ tomcat / logs), чтобы найти все последние 30-дневные файлы журналов (конечно, он включает журналы вчерашнего дня.

проверьте таблицу log_record, чтобы увидеть, экспортируются ли журналы за один день, например, 2011-02-16 не найден в log_record , поэтому я прочитаю 2011 -02-16.txt и экспортируйте их в log_past.

После экспорта вчерашнего журнала я запускаю файловый монитор для сегодняшнего журнала (2011-02-17.txt), независимо от того, существует он или нет.

2) файловый монитор

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

3 перезапуск сервера tomcat.

Иногда нам нужно перезапустить tomcat, поэтому после запуска tomcat я удаляю все журналы log_current, а затем выполняю дневную работу .

4 Моя проблема

1) две таблицы (log_current и log_past).

Потому что, если я сохраню сегодняшний журнал в log_past, я не смогу убедиться, что все файлы журнала (xxxx-xx-xx.txt) экспортированы в дБ. Так как я буду делать проверку в 00:05:00 каждый день, чтобы убедиться, что журналы до сегодняшнего дня должны быть экспортированы.

Но это затрудняет запрос журналов по вчерашнему и сегодняшнему дню.

Например, запрос с 2011-02-14 00:00:00 до 2011-02-15 00: 00: 00 , эти журналы должны быть в log_past.

Но как насчет с 2011-02-14 00:00:00 до 2011-02-17 08: 00: 00 ? (Предположим, это 2011-02-17 09:00:00 сейчас ).

Сложно делать запросы по таблицам.

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

Мне просто нужно экспортировать и прочитать журнал, и я могу проводить анализ почти в реальном времени, где в режиме реального времени мне нужно сделать журналы текущего дня видимыми по графику / таблице и т. Д.

1 Ответ

0 голосов
/ 17 февраля 2011

Прежде всего, IMO вам не нужны 2 разные таблицы log_current и log_past.Вы можете вставить все строки в одну таблицу, скажем, logs и извлечь, используя select * from logs where id = (select id from log_record where savedDate = 'YOUR_DATE'). Это даст вам все журналы определенного дня.

Теперь, когда вы сможете удалить текущий иПрошлое различие между таблицами, использующими вышеуказанный способ, я думаю, что проблема, которую вы здесь задаете, будет решена.:)

...