2010-02-25 1 views
0

Есть ли у вас какие-либо сведения о наиболее элегантном способе сохранения объектов с динамического языка в базе данных документов?Запрос консультаций о сохранении объектов с динамического языка в базу данных документа

У меня солидный фон на C# и только что началось программирование на Python. В то же время я пытаюсь изучить веревки MongoDB.

Теперь мне интересно: какой самый элегантный способ сохранить мои данные в базе данных MongoDB? Я рассмотрел несколько подходов:

  1. Сделать все классы Python способными создать график словарей и списков, представляющих их состояние. Кроме того, они могут инициализировать свое состояние из такого графика. Когда я хочу сохранить объект, я попрошу его представить его графическое представление и сохранить это. Когда я хочу получить объект, я получу граф документа и предоставил его методу __init__ моего класса.

  2. Создайте отдельный класс Mapper, способный проверять данный объект и создавать граф словарей и списков, которые я могу затем хранить в MongoDB. Mapper также будет отвечать за создание объектов, данные которых были получены из базы данных.

  3. Я пробовал mongoengine, документ-объект mapper. Однако я был разочарован, когда он заставил меня выводить мои классы из определенного класса (Документ). Это напомнило мне Microsoft Entity Framework 1.0 и отсутствие поддержки POCO. Я не хочу, чтобы меня выводили из определенного класса. Это не так, но я не уверен, действительно ли это проблема на динамическом языке.

Является ли мое мышление мешающим моим фоном в C#? Я уверен, что я не оценил степень гибкости, которую предоставляет динамический язык, поэтому мы будем очень благодарны за любые советы или рекомендации по лучшим практикам.

Спасибо.

ответ

1

Python определяет несколько специальных методов, таких как getstate и многие другие, чтобы позволить вашим классам точно определять, как лучше всего сериализовать и де-сериализовать свои экземпляры. Все они используются внутри модуля pickle (который затем использует эту информацию для создания «блоба», то есть строки байтов, и восстанавливает объекты из таких блоков), но если вы хотите лучше индексировать полученные путем хранения графиков напрямую, чем через непрозрачные капли, это в основном вопрос о настройке процедур pickle для остановки, прежде чем превращать графики в капли. Я думаю, вам нужно будет сделать это с помощью copy-paste-edit от pickle.py (так как он не предназначен для того, чтобы настраиваться таким образом более элегантными способами, такими как подклассификация), но это все равно должно сэкономить много работы, переделав все это с нуля.

Я считаю, что этот подход лежит где-то между вашими вариантами 1 и 2 - классы должны определять такие специальные методы только в ответ на конкретные потребности, и большая часть работы, необходимой для организации различных возможностей, будет обрабатываться вашим маринованием, вариант (так же, как он обрабатывается самим рассолом для «нормального» случая, когда сериализованная форма является блобом).

Смежные вопросы