2013-11-09 2 views
2

У меня есть программа на C++ в стадии разработки, которая обрабатывает множество различных типов объектов, которые необходимо извлечь из файлов при запуске. Общий размер файла немного меньше 1 ГБ. Программа должна работать как минимум на Windows 7 и Linux.Локальная/выделенная база данных sql для программы

Моя цель состоит в том, чтобы обеспечить функциональные возможности для чтения файлов и сохранять их в объекты (в том числе проверки достоверности данных), так что решения я могу думать о том, являются:

  1. просто обеспечивает по меньшей мере одна функции на каждый тип объекта для чтения из файлов и копирование данных на вновь созданные объекты. Это то, что я делал до сих пор.
  2. Используйте базу данных для хранения данных и получения их с помощью SQL.

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

  • Я не разрешено подключаться к Интернету с моей программой, поэтому база данных удаленный сервер находится вне вопрос.
  • Мне не разрешено создавать программу, которая заставляет пользователя устанавливать дополнительное программное обеспечение, в данном случае, локальную базу данных.
  • Доступ к локальным данным может быть выполнен только при запуске программы: никаких дополнительных исполняемых файлов, которые пользователь может запускать для изменения или чтения файлов.

Я искал в Интернете библиотеку C++, которая позволяет программе хранить/извлекать определенные данные в локальные файлы, используя синтаксис SQL, но до сих пор у меня ничего нет. Программное обеспечение базы данных, которое я знаю, например MySQL, Postgresql и т. Д. Не будет делать из-за ограничений, о которых я упоминал.

Мой главный вопрос: Есть ли такая библиотека для C++, или мне нужно реализовать свои собственные? Я бы предпочел, чтобы это было бесплатно, но я могу делать все, что могу найти.

Если таких библиотек нет, знает ли кто-нибудь другие альтернативы для хранения данных локально для C++-программы? И если бы я должен был реализовать свой собственный, каким образом (как в структурах данных файла) будет храниться мои объекты (без его чрезвычайно медленного для менее 1 ГБ данных)?

ответ

2

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

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

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