2012-01-31 1 views
1

Мне нужен быстрый метод обновления данных типа ключа/значения или, альтернативно, произвольное количество «счетчиков» в системе в целом по Linux. Рассматриваемые системы - Ubuntu 10.04, RHEL 4.8 и RHEL 5.x.Системный глобальный счетчик, который может быть обновлен программно (на разных версиях Linux)?

Теперь я знаю memcached, но, похоже, он больше подходит для длительных процессов, таких как процессы FastCGI. К сожалению, мой процесс является традиционным CGI и поэтому должен использовать некоторое постоянное хранилище вне самого процесса.

Какие варианты у меня есть и какие самые простые и самый дешевый (w.r.t. runtime) для доступа с C/C++?

Примечание: это не для измерения скорости (то есть счетчиков производительности), а для измерения количества событий определенного типа. И для надежного подсчета я должен иметь возможность атомарно увеличивать счетчики по желанию ...

ответ

1

Вы можете использовать простую базу данных DBM, например GDBM.

+0

Спасибо. Однако в документации abotu GDBM не упоминается атомарность. Итак, как это будет происходить с одновременными экземплярами CGI, пытающимися создать один и тот же счетчик? Как насчет ACID? – 0xC0000022L

+0

@STATUS_ACCESS_DENIED Проверьте другие базы данных в статье в Википедии. Некоторые из них имеют атомарность и/или обработку ACID. Я думаю, что большинство DBM-семейств намного легче, чем современные базы данных «NoSQL», которые они вдохновили. –

+0

спасибо, вы правы VSDB выглядит многообещающим. – 0xC0000022L

1

Вы можете попробовать небольшую базу данных SQLite. SQLite является FAST и надежным, любое приложение может его модифицировать, а метод транзакции предотвращает столкновение. Просто добавьте запись в таблицу для каждого события или используйте одну таблицу со столбцом [event]. Вставка очень быстро, медленный поиск, но вы будете искать только при анализе данных, надеюсь, ПОСЛЕ того, что производительность является фактором.

+0

Спасибо. Да, данные будут полностью прочитаны. Вероятно, даже на той же машине, поэтому переносимый формат поддается (я понимаю, что даже двоичный формат SQLite в значительной степени переносится по версиям и определенно по архитектурам). – 0xC0000022L

1

В настоящее время для

для обновления данных типа ключ/значение

Разработчики часто используют NoSQL базы данных. Они работают в основном на linux-системах, а некоторые из них находятся на C++ (MongoDB & ClusterPoint). Они очень быстры для такого рода вещей, они очень стараются поддерживать низкую задержку, и с ним легко получить доступ к C++, поскольку они закодированы на C++.

+0

Спасибо за ответ, но не факт, что каждый из порожденных экземпляров должен установить соединение, что является большой проблемой? Как насчет ACID? – 0xC0000022L

+0

@STATUS_ACCESS_DENIED Я знаю больше о MongoDB, чем ClusterPoint, но вы можете делать атомарные приращения внутри команды по значению, вы также можете использовать пул соединений, чтобы ограничить установку холодного соединения для каждого запроса. Я не уверен, но думаю, что Redis может быть лучше для этого конкретного случая использования, хотя ... который или имеет простой сервис, который использует постоянное хранилище для файла, который содержит только двоичное кодированное 64-битное беззнаковое целое число. – Tracker1

Смежные вопросы