Есть один отличный формат, отвечающий всем вашим критериям:
SQLite!
Прочтите статью об использовании SQLite в качестве формата файла приложения. Также, пожалуйста, посмотрите Google Tech Talk Д. Ричарда Хиппа (автора SQLite) об этом очень тема.
Теперь давайте посмотрим, насколько SQLite соответствует вашим требованиям:
Формат является "стандартным"
SQLite стал предпочтительным форматом для большинства мобильных сред и для многих настольных приложений (Firefox, Thunderbird, Google Chrome, Adobe Reader и т. д.).
Легко интегрируется с C++
SQLite имеет стандартный интерфейс C, который представляет собой только один исходный файл и один заголовочный файл. Существуют также оболочки C++.
Поддерживает табличный ввод (2D, n-мерный)
Таблица SQLite настолько таблична, насколько вы можете себе представить. Чтобы представить, скажем, трехмерные данные, создайте таблицу со столбцами x,y,z,value
и сохраните свои данные в виде набора строк следующим образом:
x1,y1,z1,value1
x2,y2,z2,value2
...
Поддерживает типы POD
Я предполагаю, что под POD вы имели в виду обычные старые данные или BLOB. SQLite позволяет хранить поля BLOB как есть.
Может расширяться по мере необходимости дополнительных входных данных, хорошо привязывается к переменным
Вот где он действительно светит.
Скорость парсинга не очень важна
Но скорость SQLite превосходна. На самом деле синтаксический анализ в основном прозрачен.
В идеале писать (размышлять) так же легко, как и читать
Просто используйте INSERT
для записи и SELECT
для чтения — что может быть проще?
Хорошо работает в Windows и Linux
Вы держите пари, и все другие платформы, а также.
Поддерживает композитинг (один файл ссылается на другой файл для чтения)
Вы можете ПРИСОЕДИНЯТЬ одну базу данных к другой.
Удобочитаемый
Не в двоичном виде, но есть много отличных браузеров/редакторов SQLite. Мне нравится SQLite Expert Personal для Windows и sqliteman в Linux. Существует также плагин редактора SQLite для Firefox.
Есть и другие преимущества, которые SQLite дает вам бесплатно:
Данные индексируются, что упрощает поиск. Вы просто не можете сделать это, используя XML, JSON или любые другие текстовые форматы.
Данные можно редактировать частично, даже если объем данных очень велик. Вам не нужно перезаписывать несколько гигабайт только для редактирования одного значения.
SQLite полностью транзакционный: он гарантирует постоянную согласованность ваших данных. Даже если ваше приложение (или весь компьютер) выйдет из строя, ваши данные будут автоматически восстановлены до последнего известного согласованного состояния при следующей первой попытке подключения к базе данных.
SQLite сохраняет ваши данные дословно: вам не нужно беспокоиться об экранировании ненужных символов в ваших данных (включая нулевые байты, встроенные в ваши строки) — просто всегда используйте подготовленные операторы — это все, что нужно, чтобы сделать его прозрачным. Это может быть большой и раздражающей проблемой при работе с форматами текстовых данных, в частности с XML.
SQLite хранит все строки в Unicode: UTF-8
(по умолчанию) или UTF-16
. Другими словами, вам не нужно беспокоиться о кодировке текста или международной поддержке вашего формата данных.
SQLite позволяет обрабатывать данные небольшими порциями (фактически построчно), поэтому он хорошо работает в условиях нехватки памяти. Это может быть проблемой для любых текстовых форматов, потому что часто им нужно загрузить весь текст в память, чтобы проанализировать его. Конечно, существует несколько эффективных потоковых синтаксических анализаторов XML, но в целом любой синтаксический анализатор XML будет довольно жадным по памяти по сравнению с SQLite.
person
mvp
schedule
05.02.2013