Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Visual Basic Новый топик    Ответить
 Сериализация ассоциативного массива в файл. Замена PropertyBag. NoSQL в VB6  [new]
Eolt
Member

Откуда:
Сообщений: 1402
У меня есть программка - хранилище документов. В ней отображается дерево документов для навигации и текстовое поле для редактирования. Все документы сериализованы в PropertyBag. Где ключ привязан к узлу дерева. При сохранении хранилища, обходим в цикле все узлы дерева, собираем в PropertyBag, сохраняем его в файл. При чтении хранилища, читаем весь PropertyBag в байтовый массив, десериализуем, в цикле строим дерево с узлами, присваивая каждому узлу ссылку на текстовый документ. В общем все просто.

И работало отлично... Пока размер хранилища документов не подполз к 200 мегабайтам. Тогда программа начала тупить и виснуть. Потому как при чтении хранилища размер программы в памяти увеличивался с 10 мегабайт до 950 мб. Путь тупиковый оказался. Нельзя загружать весь файл PropertyBag в память. Нужно частями. Но сделать это невозможно со стандартным PropertyBag, нужна своя реализация. Может кто-то видел подобное хранилище в исходниках? Или может подкинуть идею как ее реализовать?

P.S. Конечно можно все переписать с использованием обычной БД Access или SQLite. Но это уже не так интересно. С точки зрения тренировки мозгов))

К сообщению приложен файл. Размер - 32Kb
12 фев 19, 12:16    [21807243]     Ответить | Цитировать Сообщить модератору
 Re: Сериализация ассоциативного массива в файл. Замена PropertyBag. NoSQL в VB6  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 18768
Надеюсь, хранилище это - кластеризованное, не потоковое?

Ну первая мысль - это построение документа-индекса. Т.е. грубо - в левом окне свой документ, который хранит имена документов, информацию об их расположении в дереве документов, и ссылку на PropertyBag отдельных документов. Индекс может быть как отдельным хранилищем, так и первым (или там нулевым) элементом в общем файле.

Соответственно при переходе текущего выделения в левом окне на некий документ в правое окно по его ссылке подчитывается сам документ. При изменениях - корректируется документ, если изменения затрагивают индекс (скажем, меняется название или сам документ перемещается в дереве) - то корректируется и документ-индекс.
12 фев 19, 13:22    [21807320]     Ответить | Цитировать Сообщить модератору
 Re: Сериализация ассоциативного массива в файл. Замена PropertyBag. NoSQL в VB6  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 18768
Eolt
сделать это невозможно со стандартным PropertyBag, нужна своя реализация
Опять же можно подумать о делении хранилища на несколько - эдакий аналог партиционирования. В оптимуме на SQRT(count), а там хоть до отдельного хранилища на каждый файл. А для компактности всё это зазиповать и работать с архивом как с compressed folder.
12 фев 19, 13:25    [21807326]     Ответить | Цитировать Сообщить модератору
 Re: Сериализация ассоциативного массива в файл. Замена PropertyBag. NoSQL в VB6  [new]
ATM-TURBO 2
Member

Откуда:
Сообщений: 165
Используй OLE storage (StgCreateStorageEx), там файловая система внутри файла. Папки - IStorage, файлы IStream.
12 фев 19, 13:51    [21807362]     Ответить | Цитировать Сообщить модератору
 Re: Сериализация ассоциативного массива в файл. Замена PropertyBag. NoSQL в VB6  [new]
Eolt
Member

Откуда:
Сообщений: 1402
Хранение множества файлов в OLE storage это пожалуй самый хороший вариант
12 фев 19, 14:26    [21807417]     Ответить | Цитировать Сообщить модератору
Все форумы / Visual Basic Ответить