Запрос рекомендаций по сохранению объектов из динамического языка в базу данных документов - PullRequest
0 голосов
/ 26 февраля 2010

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

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

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

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

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

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

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

Спасибо.

1 Ответ

1 голос
/ 26 февраля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...