C ++ с fstream или базой данных - PullRequest
2 голосов
/ 11 марта 2010

Я пытаюсь реализовать программу распознавания изображений на C ++ .

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

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

У вас, ребята, есть какой-нибудь опыт использования fsream или базы данных в качестве выбора для быстрого постоянного хранения?

Ответы [ 4 ]

1 голос
/ 11 марта 2010

Вы можете использовать SQLite . Это в основном дает доступ к локальным файлам в стиле базы данных. С его помощью вы также можете создавать базы данных в памяти, но я не знаю, можно ли их сохранить.

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

0 голосов
/ 12 марта 2010

Я пишу программу распознавания звука на C ++ и сейчас использую PostgreSql для хранения данных. Так что мне тоже интересен ответ :). Что я могу предложить, так это то, что хранилище данных следует выбирать в соответствии с алгоритмом распознавания. Если вы сравните свое изображение с сохраненными изображениями 1 на 1, то двоичные файлы будут выглядеть быстрее. Но если во время распознавания вы работаете с несколькими изображениями одновременно, база данных может быть более быстрым решением.

0 голосов
/ 11 марта 2010

Для меня преимущество использования базы данных, такой как SQLite, является независимым форматом для моих данных и возможностью запрашивать данные с использованием SQL.

Запись данных в базу данных SQLite оказалась намного медленнее, чем запись в простой текстовый файл CSV.

Это зависит от того, что вы хотите сделать с данными впоследствии? Если вы просто хотите прочитать это снова и сделать что-то еще, используйте fstream (или ввод-вывод в стиле C), как предложено. Если вы хотите запрашивать данные и получать только определенные данные, используйте SQLite.

Вы также должны рассмотреть, как вы хотите хранить данные в базе данных. Если вы собираетесь хранить данные в виде BLOB, вы можете потерять преимущества SQL и снизить производительность.

0 голосов
/ 11 марта 2010

Если вам действительно нужна скорость, рассмотрите возможность использования функций ввода-вывода в стиле C, таких как fopen (0, fread () и т. Д. Они могут быть заметны быстрее, чем iostreams, по ряду причин.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...