У меня есть проект, который имеет довольно сложные, вложенные (ссылки Назвав ссылочных объектов вверх и вниз) объект (класс), хранящиеся в словаре как:отображение файла в память или сериализации, скорость на очень большой объект
public static Dictionary<string, Object1> DObject { get; set; }
Объект1 - сложный класс. Это не похоже на класс «адресная книга» или «информация о человеке». Сам класс имеет массивы, словари другого объекта. Этот класс ссылок на объекты над ним и т. Д.
Поскольку размер DObject может быть 1 ГБ + в памяти, я собираюсь сериализовать его в файл с помощью BinaryFormatter. Поскольку мне нужно загрузить этот объект, я думал об использовании MemoryMappedFile. В словарь могут быть добавлены новые ключи и значения. У объектов может быть больше данных (добавлено/обновлено) и т. Д. Изменяет ли размер MMF? Как получить доступ к определенному ключу в объекте DObject в файле с отображением памяти? Есть ли механизм поиска, как хэш-таблица в памяти, поэтому я могу найти определенный ключ, как словарь, и получить его значение? Как работает MMF?
Мое идеальное мышление есть. Имейте большой файл на диске (2 ГБ +). Я быстро обновляю объект в словаре быстро, как память, сохраненная на диске. Все быстро. Ключевое значение просматривается полностью. Я смотрю вверх, редактирую значение, сохраняю и т. Д. Я бы хотел получить быстрый доступ к этому объекту 2GB + в любое время. Если сервер WCF перезагрузится, мне понадобится быстрый доступ к этому объекту размером 2 ГБ +. Вот почему я думал: 1) сериализация 2). загружать и читать из/в MMF. В настоящий момент моя главная проблема - это скорость. Я не могу перезагружать эти данные 2 ГБ с нуля каждый раз, когда я отлаживаю проект, другими словами (требуется много времени).
Любые предложения, идеи и мысли о том, как я должен справиться с этой ситуацией.
для долговременного сохранения, вы можете столкнуться с проблемой с бинарным форматированием (изменение пространства имен, например, приведет к возникновению проблем). Для краткосрочного хранения это может быть хорошо, но будьте осторожны с использованием памяти, я не думаю, что вы можете без проблем сериализовать граф 1Gb с бинарным форматированием в 32-битном процессе. Если вы считаете, что сопоставление с таблицами дает вам проблему с полным сопротивлением, возможно, вы можете рассмотреть базу данных документов, такую как RavenDB, которая отображает весь граф документа в JSON на диске и обрабатывает много проблем для вас? –
Может ли любая из этих баз данных анализировать граф объектов (20 взаимосвязанных классов) с JSON/BSON и сохранять все ссылки между ними, а затем хранить? Как это работает? Моя идеальная мысль заключается в том, что я подаю DObject в RavenDB или MongoDB прямо, и они сериализуют и хранят все? Каковы шаги, если я хочу поместить DObject в RavenDB? Я новичок в MongoDB, но слышал об этом много. – iefpw
Независимо от того, будет ли RavenDB просто проглатывать ваш объект напрямую или нет, зависит от того, как структурирован ваш объект. RavenDB использует JSon.NET, поэтому вы всегда можете начать с попытки сбросить корневой объект с помощью Json.NET и посмотреть, как далеко вы доберетесь. –