NtopNG : Myisam à Innodb

NtopNG : Myisam à Innodb jpp

Note : valable aussi en V2.4 et V3.0. 
Les deux tables créées par NtopNG sont d'office en MyISAM, si, comme moi, vous avez d'autres tables en InnoDB dans votre base vous allez vouloir profiter des buffers de InnoDB pour vos traitements. 
Par ailleurs, en cas de crash, InnoDB est plus "sûr" que MyISAM.
Mais, car il y a un "mais", si vous faites cette modification "à la main" pour passer les deux tables de MyISAM en InnoDB, ce qui est simple, un simple "alter table truc engine = innodb" ne suffit pas ! 
Si vous le faites, NtopNG s'empressera lors du prochain démarrage de repasser la table en MyISAM ! Et ce sans rien vous demander. 
La seule manière pour réaliser l'exploit de passer en InnoDB est d'aller modifier les sources du paquet. 
Le module "MySQLDB.cpp" vous tend les bras dans le répertoire "src". Il suffit de modifier quelques constantes "MyISAM" --> "InnoDB" aux environs de la ligne 310 pour ressembler à ceci :

// Modify database engine to MyISAM (that is much faster in non-transactional environments) 
  for (u_int16_t i = 0; i < sizeof(ipvers); i++){ 
    snprintf(sql, sizeof(sql), 
         "SELECT 1 " 
         "FROM information_schema.TABLES " 
         "WHERE TABLE_SCHEMA='%s' " 
         "AND TABLE_NAME='%sv%hu' " 
         "AND ENGINE='MyISAM' ", 
         ntop->getPrefs()->get_mysql_dbname(), 
         ntop->getPrefs()->get_mysql_tablename(), 
         ipvers[i]); 
    if(exec_sql_query(&mysql, sql, true, true) > 0){ 
      // if here, the table has enging InnoDB so we want to modify that to MyISAM 
      ntop->getTrace()->traceEvent(TRACE_NORMAL,

    ntop->getTrace()->traceEvent(TRACE_NORMAL, 
                   "MySQL schema update. Altering table %sv%hu: " 
                   "changing engine from Myisam to InnoDB.", 
                   ntop->getPrefs()->get_mysql_tablename(), ipvers[i]);

      snprintf(sql, sizeof(sql), 
           "ALTER TABLE `%sv%hu` ENGINE='InnoDB'", 
           ntop->getPrefs()->get_mysql_tablename(), ipvers[i]); 
      exec_sql_query(&mysql, sql, true, true);

  
Après une petite recompilation et la régénération du paquet on ré-installe et au premier démarrage nos tables sont migrées en InnoDB, automatiquement et sans rien demander ! 
Attention; si vos tables sont un peu volumineuses, cela dure un certain temps ! Et demande de l'espace disque (environ le double de l'espace occupé par la table MyIsam.