Skip to content

4 Database Schema

Mr-Method edited this page Aug 28, 2025 · 1 revision

Структура бази даних PON Monitor

Огляд

PON Monitor використовує спеціалізовані таблиці для зберігання інформації про PON мережу. Всі таблиці мають префікс pon_ та розташовані в основній базі даних NoDeny.

Схема зв'язків

erDiagram
    pon_bind }o--|| pon_olt : "інформація про OLT"
    pon_bind ||--o{ pon_fdb : "має FDB записи"
    pon_bind }o--|| pon_onu : "інформація про ONU"
    pon_bind ||--o{ z_daily_pon : "архівні дані"
    
    pon_olt {
        smallint id PK
        varchar ip
        varchar name
        varchar vendor
        varchar model
        text param
        tinyint enable
    }
    
    pon_bind {
        int id PK
        char sn
        smallint olt_id FK
        char llid
        decimal tx
        decimal rx
        char status
    }
    
    pon_onu {
        mediumint id PK
        varchar sn UK
        varchar vendor
        varchar model
        varchar place_type
        varchar place
    }
    
    pon_fdb {
        char mac PK
        smallint vlan
        char llid
        smallint olt_id FK
        int uid
    }
Loading

Основні таблиці

1. pon_olt - OLT сервери

Конфігурація OLT пристроїв для моніторингу.

CREATE TABLE IF NOT EXISTS `pon_olt` (
  `id` smallint UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` varchar(30) NOT NULL DEFAULT 'new olt',
  `ip` varchar(15) NOT NULL,
  `snmp_port` smallint NOT NULL DEFAULT '0',
  `vendor` varchar(20) NOT NULL DEFAULT '',
  `model` varchar(20) NOT NULL DEFAULT '',
  `firmware` varchar(48) NOT NULL DEFAULT '',
  `ro_comunity` varchar(32) NOT NULL DEFAULT '',
  `rw_comunity` varchar(32) NOT NULL DEFAULT '',
  `pon_type` varchar(16) NOT NULL DEFAULT 'gpon',
  `mng_tmpl` int(4) NOT NULL DEFAULT '0',
  `param` varchar(1024) DEFAULT NULL,
  `descr` varchar(250) NOT NULL DEFAULT '',
  `status` tinyint(1) NOT NULL DEFAULT '9',
  `enable` tinyint(1) NOT NULL DEFAULT '0',
  `changed` int NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `olt_uniq` (`ip`,`snmp_port`,`pon_type`)
) ENGINE=InnoDB COMMENT='OLT list';

Поля:

  • id - унікальний ідентифікатор OLT
  • name - назва OLT для відображення
  • ip - IP адреса пристрою
  • snmp_port - SNMP порт (зазвичай 161)
  • vendor - виробник (ZTE, BDCOM, STELS, V-Solutions)
  • model - модель пристрою
  • firmware - версія прошивки
  • pon_type - тип PON мережі (gpon/epon)
  • param - JSON параметри підключення
  • descr - опис пристрою
  • status - поточний статус (0-9)
  • enable - увімкнено моніторинг (0/1/2)
  • changed - час останньої зміни (UNIX timestamp)

2. pon_bind - Прив'язки ONU

Зв'язки між ONU та портами OLT з поточними параметрами.

CREATE TABLE IF NOT EXISTS pon_bind (
  id SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
  sn CHAR(18) NOT NULL,
  olt_id SMALLINT(4) NOT NULL,
  llid CHAR(16) NOT NULL,
  name CHAR(32) NOT NULL DEFAULT '',
  tx CHAR(6) DEFAULT NULL,
  rx CHAR(6) DEFAULT NULL,
  STATUS CHAR(30) DEFAULT NULL,
  changed INT(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (id),
  UNIQUE KEY uniq (olt_id, llid) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='ONU list';

Поля:

  • id - унікальний ідентифікатор прив'язки
  • sn - серійний номер ONU
  • olt_id - ідентифікатор OLT (FK до pon_olt)
  • llid - логічний ідентифікатор порту (наприклад: 1/1/1:1)
  • name - ім'я ONU в системі
  • tx - потужність передачі (dBm, текстовий формат)
  • rx - потужність прийому (dBm, текстовий формат)
  • STATUS - статус ONU (Online, Offline, LOS тощо)
  • changed - час останньої зміни

3. pon_onu - Інформація про ONU

Детальна інформація про ONU пристрої.

CREATE TABLE IF NOT EXISTS `pon_onu` (
  `id` mediumint UNSIGNED NOT NULL AUTO_INCREMENT,
  `sn` varchar(32) NOT NULL,
  `vendor` varchar(64) DEFAULT NULL,
  `model` varchar(24) DEFAULT NULL,
  `firmware` varchar(24) DEFAULT NULL,
  `place_type` varchar(16) DEFAULT NULL,
  `place` varchar(32) DEFAULT NULL,
  `descr` char(255) NOT NULL DEFAULT '',
  `changed` int NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `sn` (`sn`),
  KEY `place_type` (`place_type`),
  KEY `place` (`place`)
) ENGINE=InnoDB COMMENT='ONU list';

Поля:

  • id - унікальний ідентифікатор ONU
  • sn - серійний номер (унікальний)
  • vendor - виробник ONU
  • model - модель пристрою
  • firmware - версія прошивки
  • place_type - тип прив'язки (user/location)
  • place - ідентифікатор місця (UID абонента або ID ТКД)
  • descr - опис пристрою
  • changed - час останньої зміни

4. pon_fdb - FDB кеш

Кеш MAC адрес за ONU портами.

CREATE TABLE IF NOT EXISTS pon_fdb (
  mac CHAR(18) NOT NULL,
  vlan SMALLINT(4) NOT NULL,
  llid CHAR(16) NOT NULL,
  olt_id SMALLINT(4) NOT NULL,
  name VARCHAR(32) DEFAULT NULL,
  uid INT(10) DEFAULT NULL,
  time INT(11) NOT NULL DEFAULT '0',
  UNIQUE KEY mac (mac) USING BTREE,
  KEY llid (llid),
  KEY name (name) USING BTREE,
  KEY uid (uid) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='ONU list';

Поля:

  • mac - MAC адреса (первинний ключ)
  • vlan - VLAN ID
  • llid - ідентифікатор порту ONU
  • olt_id - ідентифікатор OLT
  • name - ім'я абонента (з білінгу)
  • uid - UID абонента
  • TIME - час останнього виявлення

Таблиці моніторингу

7. z{YYYY}{MM}{DD}_pon - Архівні дані

Денні таблиці для зберігання історичних даних графіків.

CREATE TABLE IF NOT EXISTS z2021_01_01_pon (
  id int(11) NOT NULL,
  sn varchar(32) NOT NULL,
  tx CHAR(6) DEFAULT NULL,
  rx CHAR(6) DEFAULT NULL,
  TIME INT(11) NOT NULL DEFAULT '0',
  KEY TIME (TIME)
) ENGINE = InnoDB DEFAULT CHARSET = utf8;

Особливості:

  • Створюються автоматично щодня
  • Назва таблиці: z{YYYY}_{MM}_{DD}_pon
  • Зберігають дані для побудови графіків
  • Автоматично очищуються через певний період

Міграції та оновлення

Тригери БД (застарілі, видалені в v2025.09.01+)

Warning

У версії v2025.09.01+ тригери були видалені для покращення продуктивності. Якщо ви оновлюєтеся з попередніх версій, обов'язково видаліть їх.

-- Тригер при додаванні ONU
DROP TRIGGER IF EXISTS `tr_aft_ins_pon`;
-- Тригер при оновленні ONU  
DROP TRIGGER IF EXISTS `tr_aft_upd_pon`;

Оновлення структури

Для оновлення структури БД використовується скрипт:

perl /usr/local/nodeny/modules/Ponmon/bin/upgrade.pl

Що робить скрипт:

  1. Перевіряє поточну структуру таблиць
  2. Додає нові, видаляє або оновлює старі поля при необхідності
  3. Конвертує дані зі старого формату
  4. Створює нові індекси
  5. Конвертує параметри з шаблонів в Параметри (v2025.08.20+)