Нужно ли libspatialindex выполнить повторную сериализацию для простого обновления?

Я ищу библиотеку c или c ++ для настольного приложения (без сервера-клиента, нужно только редактировать данные, хранящиеся на диске) со следующими функциями

  • хранит пространственные данные в виртуальной памяти, поэтому пространственные запросы выполняются быстро
  • При желании может поддерживать эквивалентные данные на диске с умными способами обновления. Обновления не должны быть мгновенными, но они могут быть помещены в буфер.

. libspatialindex, кажется, отвечает требованиям. Но есть одна вещь, которая не ясна на веб-странице, это то, что, скажем, я загрузил большой объем данных с диска и просто хочу обновить только крошечный объект. Выполняет ли libspatialindex повторную сериализацию целых данных и записывает их на диск, или разумно обновлять только те части, которые требуют изменения?

Sqlite с RTree, кажется, достигает этого. Тем не менее, я хочу иметь простую библиотеку C ++, а не все вещи SQL.

Есть ли другая альтернатива. Есть ли в GEOS функция обновления образа смарт-диска?

1

Решение

libspatialindex-х Документация DiskStorageManager говорит:

Диспетчер дискового хранилища использует два файла произвольного доступа для хранения информации. […] Файл .idx загружается в основную память во время инициализации и записывается на диск только после очистки менеджера хранилища или во время уничтожения объекта.
В случае непредвиденного сбоя изменения в диспетчере хранилища будут потеряны из-за устаревшего файла .idx. Предотвращение таких бедствий — будущая работа.

… Это означает, что соответствующая страница в файле данных обновляется при изменении записи индекса.

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


Я бы порекомендовал рассмотреть SQLite; если вам не нравится его C API, используйте фреймворк, который обертывает его, например, Qt.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]