V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
dabaizuishuai
V2EX  ›  问与答

Django Rest Framework + Mongo 经验求教

  •  
  •   dabaizuishuai · 2017-01-23 13:03:35 +08:00 · 2918 次点击
    这是一个创建于 2862 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我在做一个平台,由于之前用 django 比较熟,加之想尝试一下 Mongo ,就误入了 Django+Mongo 的深坑。发现 Django 生态中支持 mongo 的包并不多,也不够成熟。
    目前 Mongoengine+DRF 的框架,用的最多的是DRF-mongoengine。但是目前的使用中遇到了以下几个问题,希望能够找到对这方面熟悉的人帮忙解决问题,有报酬;同时也招聘全职兼职 python 程序员。我们在深圳科技园郎峰大厦,希望本地的大牛可以有偿指导。

    嵌套结构与模型继承的支持

    Mongoengine 支持嵌套结构,以及类的继承。但 DRF-Mongoengine 对 Document 的嵌套以及模型继承支持并不好。

    class A(Document):
        b = ReferenceField('B_Base')
    
    class B(Document):
        f1 = StringField()
        ....
    
    class B_1(B):
        f2 = StringField()
        ...
    
    class A_Serializer(Serializer):
        b = B_Serializer()
    

    此时如何写 A 的序列器,使得 A 能够正确读写? 能够正确读写指的是,读取时能够根据数据库中的_cls 字段,正确选择不同子类对应的 Serializer ;而写入时,可以根据前端的某些字段来正确生成对应的子类模型。

    DRF-Mongoengine 的性能优化问题

    具体包含很多问题,比如, view 中获取对象 list 的时候, DRF-Mongoengine 会在后端遍历 cursor ,此时效率非常低,需要设置 batch_size 来加快遍历效率。但是 mongoengine 的 batch_size 直到前几周才被实现。( https://github.com/MongoEngine/mongoengine/pull/1426 ) 对于 List(ReferenceField())的优化更惨。实现中我们手动使用 Mongoengine.Document.as_pymongo()来批量读取原始 json 结果到本地,再遍历 json 中的 list 来反序列化得到 list 中的每个对象,减少请求次数。

    对于这些问题,我们解决起来比较头疼,想请论坛中的大牛谈谈应对 Mongo+Django 的经验,以及如果有能提供解决方案的,我们愿意以三种方式结算, 1. 有偿指导, 2. 兼职(本地,远程), 3. 全职雇佣(本地)。

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2811 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 09:36 · PVG 17:36 · LAX 01:36 · JFK 04:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.