Есть ли способ хранить объекты python непосредственно в mongoDB без их сериализации

Я где-то читал, что вы можете хранить объекты python (более конкретно словари) в качестве двоичных файлов в MongoDB с помощью BSON. Однако сейчас я не могу найти никакой документации, связанной с этим.

Кто-нибудь знает, как именно это можно сделать?

Ответ 1

Невозможно сохранить объект в файле (базе данных) без его сериализации. Если данные должны переходить от одного процесса к другому процессу или другому серверу, его необходимо будет сериализовать в какой-либо форме для передачи. Поскольку вы спрашиваете о MongoDB, данные будут абсолютно сериализованы в той или иной форме, чтобы быть сохраненными в базе данных MongoDB. При использовании MongoDB он BSON.

Если вы действительно спрашиваете, есть ли способ сохранить более необработанную форму объекта Python в документе MongoDB, вы можете вставить поле Binary в документ, который может содержать любые данные, которые вы бы как. Он не может быть напрямую запрошен каким-либо образом в этой форме, поэтому вы потенциально теряете много преимуществ использования базы данных документов NoSQL, таких как MongoDB.

>>> from pymongo import MongoClient
>>> client = MongoClient('localhost', 27017)
>>> db = client['test-database']
>>> coll = db.test_collection    
>>> # the collection is ready now 
>>> from bson.binary import Binary
>>> import pickle
>>> # create a sample object
>>> myObj = {}
>>> myObj['demo'] = 'Some demo data'
>>> # convert it to the raw bytes
>>> thebytes = pickle.dumps(myObj)
>>> coll.insert({'bin-data': Binary(thebytes)})

Ответ 2

Предполагая, что вас особо не интересует mongoDB, вы, вероятно, не ищете BSON. BSON - это просто другой формат сериализации по сравнению с JSON, разработанный для большей скорости и эффективности пространства. С другой стороны, pickle делает больше прямого кодирования объектов python.

Однако сделайте свои тесты скорости, прежде чем вы примете pickle, чтобы убедиться, что это лучше для вашего случая использования.