Каков наилучший способ хранения данных в файле в сети, который впоследствии будет снова считан программно. Целевой платформой для программы является Linux (Fedora), но для этого потребуется записать файл на компьютер с Windows (XP)
Это должно быть в C ++, будет большое количество событий записи / чтения, поэтому они должны быть эффективными, а данные должны быть записаны таким образом, чтобы их можно было легко прочитать обратно.
Возможно, весь файл не читается обратно, мне нужно найти определенный блок данных в файле и прочитать его обратно.
Подойдет ли простой двоичный потоковый писатель?
Как хранить данные - XML?
Что еще мне нужно беспокоиться?
ОБНОВЛЕНИЕ: Для пояснения, вот некоторые ответы на Петерчена очков
Пожалуйста, уточните:
* вы только добавляете блоки, или вы
также нужно удалить / обновить их?
Мне нужно только добавить в конец файла, но мне нужно будет найти его и извлечь из любой точки в нем
*** are all blocks of the same size?**
Нет, данные будут различаться по размеру - некоторые будут свободными текстовыми комментариями (например, пост здесь), другие будут конкретными объектно-подобными данными (наборами параметров)
*** is it necessary to be a single file?**
нет, но желательно
*** by which criteria do you need to locate blocks?**
По типу данных и по метке времени. Например, если я периодически выписываю определенный набор параметров, среди других данных, таких как свободный текст, я хочу найти значение этих параметров в определенную дату / время - поэтому мне нужно искать время, которое я записал эти параметры ближе к этой дате и прочитал их обратно.
*** must the data be readable for other applications?**
номер
*** do you need concurrent access?**
Да, я могу продолжать писать, как я читаю. но должен делать только одну запись за раз.
*** Amount of data (per block / total) - kilo, mega, giga, tera?**
Объем данных будет низким для каждой записи ... от количества байтов до сотен байтов купе - всего должно быть не более нескольких сотен килобайт, возможно, до пяти мегабайт. (пока еще не уверен)
**> Если вам нужно все это, бросить свой вызов будет непросто, я бы определенно
рекомендуем использовать базу данных. Если вам нужно меньше, пожалуйста, укажите, чтобы мы могли
рекомендуем. **
База данных слишком усложнит систему, поэтому, к сожалению, это не вариант.