Демон Linux: как хранить часто обновляемые данные

#linux #daemon #datastore

#linux #демон #хранилище данных

Вопрос:

Я работаю в основном со встроенными системами (микроконтроллерами PIC), но у меня нет опыта в системном программировании Linux.

Я уже читаю книгу Роберта Лав «Системное программирование Linux», которая дает мне базовое понимание того, как моя программа должна взаимодействовать с ядром, как все работает и т. Д.

Теперь мне нужно написать демон, который должен отслеживать активность в Интернете для каждого приложения и сохранять пропускную способность каждого приложения. (это похоже на утилиту «nethogs», но мой демон должен работать все время и хранить статистику, в отличие от nethogs) Хотя мне действительно нужна такая статистика (пропускная способность для каждого приложения), я бы написал этот демон в основном в образовательных целях, поэтому мне все равно, является ли это своего рода изобретением колеса.

Вопрос короткий: какой предпочтительный метод хранения данных?

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

Я вижу два способа хранения данных:

  • Реализуйте мой собственный формат данных, какой-то текстовый файл. Мне это не нравится, потому что трудно сделать его расширяемым и так далее; Я бы полагался на какое-то существующее решение, которое хорошо соответствует моим потребностям;
  • Используйте базу данных: скажем, sqlite. Я не уверен, что это хорошая идея для записи в базу данных каждую секунду, поскольку это, вероятно, дорого. Вероятно, я должен хранить данные в ОЗУ в течение минуты и только после этого сбрасывать их в базу данных, но если подключен какой-то клиент, который отображает статистику в реальном времени, то все равно сбрасывать данные каждую секунду?

Не уверен во всем этом. Возможно, есть какие-то другие, лучшие подходы? Любые предложения приветствуются.

Комментарии:

1. Вы должны проверить RRDTool . Вероятно, вы можете использовать какой-то интерфейс к нему или, по крайней мере, те же концепции для ваших нужд здесь.

2. Спасибо за предложение, но на самом деле мне не нужна циклическая база данных, я хочу, чтобы статистика сохранялась, чтобы я мог позже проверять почасовую / ежедневную / ежемесячную / и т. Д. пропускную способность для каждого приложения.

3. будет ли клиент работать на той же машине?

4. @4aRkKn1gh7, да, сейчас меня не волнует какой-либо удаленный доступ (если я этого хочу, я могу просто подключиться через ssh, а затем запустить клиент)

5. что касается хранилища, вы правы, у вас есть 2 варианта: либо изобрести новый суперэффективный макет хранилища, либо (2) использовать базу данных для удовлетворения ваших потребностей. Если вы собираетесь хранить данные постоянно и в больших количествах, которые они в конечном итоге будут генерировать, вам, вероятно, лучше использовать базу данных. (mariadb, postgressql или sqlite) — это несколько вариантов, Но в зависимости от ваших потребностей в доступе, dbm, ndbm и т. Д. Могут быть более подходящими. Преимущество базы данных заключается в том, что код хранения и извлечения тщательно тестируется. С системой хранения next gee-whiz ваш пробег может отличаться…