2010-03-11 2 views
2

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

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

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

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

+1

Каков формат ваших данных, пожалуйста, укажите образец. – AraK

+0

В настоящее время каждая информация представляет собой двойной массив размером 809, и может быть тысячи таких наборов данных, которые будут извлекаться. Я просто понимаю, что может быть более 1 потока, обращающихся к файлу. Emm, – Yijinsei

ответ

1

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

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

0

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

+0

Спасибо за быстрый ответ. Идти, чтобы попробовать fread для реализации и посмотреть, какое время читать и писать. – Yijinsei

+0

@Yijinsei Пока вы на нем, попробуйте нестандартные функции open() и write(). – 2010-03-11 14:23:27

0

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

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

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

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

+0

после того, как я сделал извлечение изображений и сохранен. Мне нужно использовать данные для сравнения, и в каждом запросе может быть около тысячи запросов. Поэтому мне действительно нужен быстрый подход – Yijinsei

0

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

Смежные вопросы