Я ищу библиотеку c или c ++ для настольного приложения (без сервера-клиента, нужно только редактировать данные, хранящиеся на диске) со следующими функциями
. libspatialindex, кажется, отвечает требованиям. Но есть одна вещь, которая не ясна на веб-странице, это то, что, скажем, я загрузил большой объем данных с диска и просто хочу обновить только крошечный объект. Выполняет ли libspatialindex повторную сериализацию целых данных и записывает их на диск, или разумно обновлять только те части, которые требуют изменения?
Sqlite с RTree, кажется, достигает этого. Тем не менее, я хочу иметь простую библиотеку C ++, а не все вещи SQL.
Есть ли другая альтернатива. Есть ли в GEOS функция обновления образа смарт-диска?
libspatialindex-х Документация DiskStorageManager говорит:
Диспетчер дискового хранилища использует два файла произвольного доступа для хранения информации. […] Файл .idx загружается в основную память во время инициализации и записывается на диск только после очистки менеджера хранилища или во время уничтожения объекта.
В случае непредвиденного сбоя изменения в диспетчере хранилища будут потеряны из-за устаревшего файла .idx. Предотвращение таких бедствий — будущая работа.
… Это означает, что соответствующая страница в файле данных обновляется при изменении записи индекса.
По сути, это похоже на базу данных SQLite, за исключением того, что файлы SQLite не повреждаются после сбоев.
(Менеджер хранилища SQLite является очевидным расширением для libspatialindex.)
Я бы порекомендовал рассмотреть SQLite; если вам не нравится его C API, используйте фреймворк, который обертывает его, например, Qt.
Других решений пока нет …