Circular file?
От: niXman Ниоткуда https://github.com/niXman
Дата: 03.11.14 09:15
Оценка:
привет!

есть такая задача:
некоторая программа производит некоторые очень важные данные, которые нельзя терять.
до сих пор, эта программа сама выполняет сохранение данных.
этих программ становится много, и для обработки данных их нужно объединять с разных серверов, что долго и неудобно.

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


данные, это, массивы байт после сериализации. приблизительный объем одной порции данных — 1-4 кб.
программа выдает приблизительно 40-120 порция в секунду.

вопрос в том, в чем локально хранить данные?
1. gdbm/ndbm
2. sqlite
3. circular file


ну, или, предлагайте варианты.

благодарен.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: Circular file?
От: niXman Ниоткуда https://github.com/niXman
Дата: 03.11.14 09:23
Оценка:
ну, или, можно вообще на порцию данных создавать по файлу...
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: Circular file?
От: PM  
Дата: 03.11.14 09:53
Оценка: 12 (1) +1
Здравствуйте, niXman, Вы писали:

X>вопрос в том, в чем локально хранить данные?

X>1. gdbm/ndbm

Есть более современные Key-value storages. Например LMDB использует memory-mapping.

X>2. sqlite


Для доступа к данным точно нужна реляционная модель? Имхо п.1 проще

X>3. circular file


Тогда уж действительно проще каждую порцию данных сохранять в отдельный файл и после отправки на сервер удалять этот файл.
Re[2]: Circular file?
От: niXman Ниоткуда https://github.com/niXman
Дата: 03.11.14 10:04
Оценка:
Здравствуйте, PM, Вы писали:

PM>Есть более современные Key-value storages. Например LMDB использует memory-mapping.

интересно. в закладки.

PM>Для доступа к данным точно нужна реляционная модель? Имхо п.1 проще

нет. нужна возможность добавлять/удалять строки.

PM>Тогда уж действительно проще каждую порцию данных сохранять в отдельный файл и после отправки на сервер удалять этот файл.

да. пожалуй на этом варианте и остановлюсь.

вопрос можно считать закрытым.


всем спасибо.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[2]: Circular file?
От: niXman Ниоткуда https://github.com/niXman
Дата: 03.11.14 10:07
Оценка:
Здравствуйте, PM, Вы писали:

кстати, circular file я хотел использовать потому, чтоб не фрагментировать ФС, и, чтоб операции записи были более быстрые, ибо таблица inodes не будет изменяться.
отдельные файлы этим и плохи, очень много метаданных(и операций над inodes), которые мне совершенно не нужны.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[3]: Circular file?
От: Mr.Delphist  
Дата: 03.11.14 11:23
Оценка: 12 (1) +1
Здравствуйте, niXman, Вы писали:

X>Здравствуйте, PM, Вы писали:


X>кстати, circular file я хотел использовать потому, чтоб не фрагментировать ФС, и, чтоб операции записи были более быстрые, ибо таблица inodes не будет изменяться.


Ну, memory-mapped files есть даже в бусте — почему бы и не?
Re: Circular file?
От: uzhas Ниоткуда  
Дата: 03.11.14 11:27
Оценка: 12 (1) +1
Здравствуйте, niXman, Вы писали:

X>есть такая задача:

Ключевые слова — message queue persistence

У нас в конторе используется велосипед на базе меммапед файлов, в одном файле несколько порций хранится, преаллоцируется при создании, после заполнения создается новый файл, после доставки данных на сервер удаляются, но не сразу
Re[4]: Circular file?
От: niXman Ниоткуда https://github.com/niXman
Дата: 03.11.14 11:30
Оценка:
Здравствуйте, Mr.Delphist, Вы писали:

MD>Ну, memory-mapped files есть даже в бусте — почему бы и не?

я как-то об этом и не подумал...
наверное на этом варианте и остановлюсь, ибо оно там "с человеческим лицом" =)
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[2]: Circular file?
От: niXman Ниоткуда https://github.com/niXman
Дата: 03.11.14 11:32
Оценка:
Здравствуйте, uzhas, Вы писали:

U>У нас в конторе используется велосипед на базе меммапед файлов, в одном файле несколько порций хранится, преаллоцируется при создании, после заполнения создается новый файл, после доставки данных на сервер удаляются, но не сразу

почему "в одном файле несколько порций хранится" и почему "после заполнения создается новый файл"? почему не дописывать в один файл?
и почему "после доставки данных на сервер удаляются, но не сразу"? в чем смысл хранить их после доставки?
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[3]: Circular file?
От: PM  
Дата: 03.11.14 12:09
Оценка:
Здравствуйте, niXman, Вы писали:

X>кстати, circular file я хотел использовать потому, чтоб не фрагментировать ФС, и, чтоб операции записи были более быстрые, ибо таблица inodes не будет изменяться.

X>отдельные файлы этим и плохи, очень много метаданных(и операций над inodes), которые мне совершенно не нужны.

В принципе да, можно сделать нечто вроде журнала — один файл для данных, другой файл для хранения указателя на неотправленные данные. В этом случае будет все просто — файл данных будет дописываться, файл указателя обновляться.
Re: Circular file?
От: Sni4ok  
Дата: 04.11.14 02:45
Оценка:
Здравствуйте, niXman, Вы писали:

X>вопрос в том, в чем локально хранить данные?


тупо в памяти, простой сервера ведь будет конечен.
Re[2]: Circular file?
От: niXman Ниоткуда https://github.com/niXman
Дата: 04.11.14 05:02
Оценка:
Здравствуйте, Sni4ok, Вы писали:

S>тупо в памяти

это, очевидно, не вариант. иначе бы и вопроса не было.
процесс может понадобится остановить...
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[5]: Circular file?
От: PM  
Дата: 04.11.14 06:10
Оценка:
Здравствуйте, niXman, Вы писали:

MD>>Ну, memory-mapped files есть даже в бусте — почему бы и не?

X>я как-то об этом и не подумал...
X>наверное на этом варианте и остановлюсь, ибо оно там "с человеческим лицом" =)

Оно там конечно с человеческим лицом, только то лицо могло бы быть и поисмпатичнее. Готовься к исключениям из конструктора при создании нового MM-файла если не задать его начальный размер. Я уже не помню подробностей, но помню что на Windows пришлось смотреть исходный код memory_mapped_sink чтобы понять что к чему.
Re[6]: Circular file?
От: niXman Ниоткуда https://github.com/niXman
Дата: 04.11.14 10:43
Оценка:
Здравствуйте, PM, Вы писали:

PM>... Готовься к исключениям из конструктора при создании нового MM-файла если не задать его начальный размер.

понял, спасибо.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.