Каков наилучший формат файла журнала?

Мы разрабатываем инструмент базы данных, и мы хотим записать файл журнала в формате, который можно расширить и легко импортировать в таблицу базы данных. Мы все чувствуем, что фильтрация этой информации с помощью SQL - это хорошая идея, так как журнал будет длинным файлом, а "поиск" может быть недостаточно хорошим. Не могли бы вы дать мне несколько предложений? Любой опыт будет полезен! Заранее спасибо.

Ответы

Ответ 1

Первое, что я бы сказал, это то, что ваш формат файла должен быть читаемым человеком. Мои причины даны здесь: Почему я должен использовать формат для чтения человеком.

Кроме того, на такой неопределенный вопрос нельзя ответить. Однако, вот некоторые из вопросов, которые вы должны рассмотреть:

  • Как большой файл журнала растет? Как это соотносится с пространством, которое у вас есть? Если пространство будет проблемой, то более удобный формат будет лучше - например, Буферы протокола.
  • Как будет выглядеть файл журнала? Если он использует определенные инструменты, формат имеет значение меньше, чем если вы собираетесь использовать текстовый редактор или excel
  • Какие данные вы храните? Если это просто текст ASCII, то CSV работает хорошо.
  • Является ли информация о типе важной для ваших данных? Нужно ли сравнивать числа и даты как числа и даты, а не просто строки? Если это так, то какая-то типизированная система (например, XML или JSON) может быть лучше
  • Собираются ли данные передавать другим людям? В этом случае может быть важно что-то с хорошими языковыми инструментами для чтения и письма.
  • Как быстро данные должны быть написаны? Если скорость является проблемой (которая может быть для файлов журнала в реальном времени), тогда может быть важным формат, оптимизированный для этого.
  • Как быстро нужно считывать данные?
  • Будут ли все данные должны быть в памяти или их можно сканировать сериализованным способом?

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

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

Ответ 2

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

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

Наш метод:

  • используйте простой текстовый файл с простым форматированием в качестве файла журнала (например: вкладка разделена)
  • не использовать XML, он делает вещи более сложными (то есть медленными) без какой-либо выгоды.
  • веб-сайт использует блокировку файлов UNIX, чтобы просто добавить одну строку для каждой записи журнала
  • Задача cron вставляет содержимое журнала в базу данных SQL (мы используем MySQL, но это зависит от вас) каждые 10 минут.
  • это задание cron обрабатывает файл по одной строке за раз, используя блокировку файлов UNIX, чтобы предотвратить запись в журнал во время обработки, но давая публичному сайту возможность попасть в журнал после того, как каждая строка будет обработана и удалена из файла (как сделать это на предпочитаемом вами языке, было бы хорошим вторым вопросом для)
  • Задача cron имеет тайм-аут 5 минут (поэтому каждые 10 минут он будет тратить максимум 5 минут на обработку журнала, что гарантирует, что сервер не будет обрабатывать файл журнала в течение неопределенного времени, если есть проблемы с производительностью).

Это дает нам быструю запись записей журнала, не жертвуя нашими индексами в таблице журналов, предоставляя нам быстрые SQL-запросы к таблице журналов.

Мы используем это примерно 6 или 7 лет на разных серверах CentOS, и он прочный. Я предполагаю, что в зависимости от того, какая операционная система и как она настроена, это не может быть хорошим способом создания файлов журнала. Но он отлично работает в нашем тестировании.

PS: Я не вижу смысла делать файл доступным для чтения. Вы только когда-нибудь прочтете его во время отладки, а затем вы никогда не будете трогать его снова.

Ответ 3

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

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

"расширяемый"

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

"легко импортироваться

  • вам нужен либо очень распространенный формат, поддерживаемый сторонними инструментами/библиотеками (XML, CSV, SQL-вставками или любой другой формат таблицы, поддерживающий ваши SQL-инструменты) или что-то очень простое, вы можете легко писать и поддерживать

XML - очевидный выбор, потенциальные негативы:

  • подробность
  • производительности
  • читабельность

Ничего из того, о чем вы уже говорили, в то время, когда я начал писать это.

Любой опыт будет полезен!

Мы используем комбинацию XML и других форматов в наших журналах (некоторые объекты имеют процедуры сериализации XML, но общий файл не является XML)... это боль, потому что вы не можете использовать инструменты XML в файле в целом, и формат достаточно сложный, чтобы помешать легкому и надежному анализу без надлежащих инструментов. Итак, пойдите весь свиньи или вообще не.

Ответ 4

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

Например, я бы сделал простой XML-формат или что-то более понятное для человека, если мне нужно, чтобы люди читали непосредственно в исходном формате. В противном случае я бы использовал xml.

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

Затем я бы написал инструмент преобразования для базы данных, возможно, некоторые скрипты python, которые будут анализировать XML файл и вставлять данные в базу данных. Этот инструмент полностью зависит от контекста.

Я также мог бы написать script для создания html-представления журнала.

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