Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
12.02.2019, 12:16
|
|||
---|---|---|---|
Сериализация ассоциативного массива в файл. Замена PropertyBag. NoSQL в VB6 |
|||
#18+
У меня есть программка - хранилище документов. В ней отображается дерево документов для навигации и текстовое поле для редактирования. Все документы сериализованы в PropertyBag. Где ключ привязан к узлу дерева. При сохранении хранилища, обходим в цикле все узлы дерева, собираем в PropertyBag, сохраняем его в файл. При чтении хранилища, читаем весь PropertyBag в байтовый массив, десериализуем, в цикле строим дерево с узлами, присваивая каждому узлу ссылку на текстовый документ. В общем все просто. И работало отлично... Пока размер хранилища документов не подполз к 200 мегабайтам. Тогда программа начала тупить и виснуть. Потому как при чтении хранилища размер программы в памяти увеличивался с 10 мегабайт до 950 мб. Путь тупиковый оказался. Нельзя загружать весь файл PropertyBag в память. Нужно частями. Но сделать это невозможно со стандартным PropertyBag, нужна своя реализация. Может кто-то видел подобное хранилище в исходниках? Или может подкинуть идею как ее реализовать? P.S. Конечно можно все переписать с использованием обычной БД Access или SQLite. Но это уже не так интересно. С точки зрения тренировки мозгов)) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
12.02.2019, 13:22
|
|||
---|---|---|---|
Сериализация ассоциативного массива в файл. Замена PropertyBag. NoSQL в VB6 |
|||
#18+
Надеюсь, хранилище это - кластеризованное, не потоковое? Ну первая мысль - это построение документа-индекса. Т.е. грубо - в левом окне свой документ, который хранит имена документов, информацию об их расположении в дереве документов, и ссылку на PropertyBag отдельных документов. Индекс может быть как отдельным хранилищем, так и первым (или там нулевым) элементом в общем файле. Соответственно при переходе текущего выделения в левом окне на некий документ в правое окно по его ссылке подчитывается сам документ. При изменениях - корректируется документ, если изменения затрагивают индекс (скажем, меняется название или сам документ перемещается в дереве) - то корректируется и документ-индекс. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
12.02.2019, 13:25
|
|||
---|---|---|---|
Сериализация ассоциативного массива в файл. Замена PropertyBag. NoSQL в VB6 |
|||
#18+
Eoltсделать это невозможно со стандартным PropertyBag, нужна своя реализацияОпять же можно подумать о делении хранилища на несколько - эдакий аналог партиционирования. В оптимуме на SQRT(count), а там хоть до отдельного хранилища на каждый файл. А для компактности всё это зазиповать и работать с архивом как с compressed folder. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
12.02.2019, 13:51
|
|||
---|---|---|---|
|
|||
Сериализация ассоциативного массива в файл. Замена PropertyBag. NoSQL в VB6 |
|||
#18+
Используй OLE storage (StgCreateStorageEx), там файловая система внутри файла. Папки - IStorage, файлы IStream. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=60&mobile=1&tid=2154943]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
46ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 148ms |
0 / 0 |