Структуры метаданных в?база данных - PullRequest
0 голосов
/ 20 октября 2011

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

Простой / немой подход выглядит как пара больших ключей и значенийтаблица с ключом к таблице «родительских» объектов, которые описываются данными.

Данные будут иметь следующие свойства:

  1. Будет связано много фрагментов «метаданных»к одному родительскому объекту
  2. Данные всегда будут в форме пары ключ-значение
  3. Данные не будут иерархическими (только один уровень пар ключ-значение)
  4. Тамбудет много этого.Никогда не очищается.При необходимости перенесено в дубликаты архивных хранилищ

Например,

Файл журнала анализируется, и его сообщения переносятся в некоторый определенный формат на основе некоторых правил следующим образом:

  • Журнал / Имя системы
  • Местоположение
    • Дата
    • Время
    • Уровень
    • Сообщение

Для многих различных систем может быть проанализировано много журналов.Каждая система может иметь разные поля.

Поля Дата / Время / Уровень / Сообщение известны только при создании правил синтаксического анализа файла, а не при создании хранилища данных.

Как бы вы пошли об этом?Какую базу данных / дизайн вы бы использовали?

1 Ответ

0 голосов
/ 20 октября 2011

Вариант 1: используйте одну из баз данных NoSQL, например MongoDB - я не знаком с ними, так как живу в основном в мире SQL Server. Это позволяет вам иметь записи, которые являются документами, а не статическим числом столбцов, как у реляционных БД

Вариант 2: реляционная БД

Таблица: Журнал {Id (PK), Дата, Время, Уровень, Сообщение} Таблица: ExtraFields {Id (PK), FieldName} Таблица: дополнительные поля {FieldId (PK), LogId (PK), значение}

Здесь каждая запись получит запись журнала, а затем ряд дополнительных полей в AdditionalFields, которые ссылаются на LogId. Затем вы можете загрузить их в объект журнала. Таблица ExtraFields будет иметь все типы полей. Если при загрузке записи ее не существует, добавьте еще одну. Так что это может быть URL, IP, User-Agent и т. Д., Если это веб-журналы.

В качестве альтернативы вы можете избежать таблицы ExtraFields и просто поместить имя поля непосредственно в таблицу AdditionalFields.

...