есть такая задача:
некоторая программа производит некоторые очень важные данные, которые нельзя терять.
до сих пор, эта программа сама выполняет сохранение данных.
этих программ становится много, и для обработки данных их нужно объединять с разных серверов, что долго и неудобно.
сейчас хочу переделать программы так, чтоб они все сливали данные на один сервер данных.
программы, должны иметь возможность работать даже в том случае, если сервер данных недоступен.
программы должны уметь копить данные локально, до тех пор пока недоступен сервер данных.
программы должны уметь реконектиться к серверу данных, и, при успешном подключении, отсылать свои накопленные данные.
данные, это, массивы байт после сериализации. приблизительный объем одной порции данных — 1-4 кб.
программа выдает приблизительно 40-120 порция в секунду.
вопрос в том, в чем локально хранить данные?
1. gdbm/ndbm
2. sqlite
3. circular file
ну, или, предлагайте варианты.
благодарен.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, PM, Вы писали:
PM>Есть более современные Key-value storages. Например LMDB использует memory-mapping.
интересно. в закладки.
PM>Для доступа к данным точно нужна реляционная модель? Имхо п.1 проще
нет. нужна возможность добавлять/удалять строки.
PM>Тогда уж действительно проще каждую порцию данных сохранять в отдельный файл и после отправки на сервер удалять этот файл.
да. пожалуй на этом варианте и остановлюсь.
вопрос можно считать закрытым.
всем спасибо.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
кстати, circular file я хотел использовать потому, чтоб не фрагментировать ФС, и, чтоб операции записи были более быстрые, ибо таблица inodes не будет изменяться.
отдельные файлы этим и плохи, очень много метаданных(и операций над inodes), которые мне совершенно не нужны.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, niXman, Вы писали:
X>Здравствуйте, PM, Вы писали:
X>кстати, circular file я хотел использовать потому, чтоб не фрагментировать ФС, и, чтоб операции записи были более быстрые, ибо таблица inodes не будет изменяться.
Ну, memory-mapped files есть даже в бусте — почему бы и не?
Здравствуйте, niXman, Вы писали:
X>есть такая задача:
Ключевые слова — message queue persistence
У нас в конторе используется велосипед на базе меммапед файлов, в одном файле несколько порций хранится, преаллоцируется при создании, после заполнения создается новый файл, после доставки данных на сервер удаляются, но не сразу
Здравствуйте, Mr.Delphist, Вы писали:
MD>Ну, memory-mapped files есть даже в бусте — почему бы и не?
я как-то об этом и не подумал...
наверное на этом варианте и остановлюсь, ибо оно там "с человеческим лицом" =)
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, uzhas, Вы писали:
U>У нас в конторе используется велосипед на базе меммапед файлов, в одном файле несколько порций хранится, преаллоцируется при создании, после заполнения создается новый файл, после доставки данных на сервер удаляются, но не сразу
почему "в одном файле несколько порций хранится" и почему "после заполнения создается новый файл"? почему не дописывать в один файл?
и почему "после доставки данных на сервер удаляются, но не сразу"? в чем смысл хранить их после доставки?
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, niXman, Вы писали:
X>кстати, circular file я хотел использовать потому, чтоб не фрагментировать ФС, и, чтоб операции записи были более быстрые, ибо таблица inodes не будет изменяться. X>отдельные файлы этим и плохи, очень много метаданных(и операций над inodes), которые мне совершенно не нужны.
В принципе да, можно сделать нечто вроде журнала — один файл для данных, другой файл для хранения указателя на неотправленные данные. В этом случае будет все просто — файл данных будет дописываться, файл указателя обновляться.
Здравствуйте, niXman, Вы писали:
MD>>Ну, memory-mapped files есть даже в бусте — почему бы и не? X>я как-то об этом и не подумал... X>наверное на этом варианте и остановлюсь, ибо оно там "с человеческим лицом" =)
Оно там конечно с человеческим лицом, только то лицо могло бы быть и поисмпатичнее. Готовься к исключениям из конструктора при создании нового MM-файла если не задать его начальный размер. Я уже не помню подробностей, но помню что на Windows пришлось смотреть исходный код memory_mapped_sink чтобы понять что к чему.
Здравствуйте, PM, Вы писали:
PM>... Готовься к исключениям из конструктора при создании нового MM-файла если не задать его начальный размер.
понял, спасибо.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)