问个技术问题: HTML 表单中 MutilpleSelect 有大量的待选数据该如何优化? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mywaiting

问个技术问题: HTML 表单中 MutilpleSelect 有大量的待选数据该如何优化?

  •  
  •   mywaiting 2019 年 2 月 23 日 1191 次点击
    这是一个创建于 2618 天前的主题,其中的信息可能已经有所发展或是发生改变。

    编写 HTML 表单,有 MutilpleSelect 选择框,本来也没有啥特别的,用了 Python WTForms 处理表单的 data validate,待选的数据直接默认传入 form.tags.choices = [....] 就可以了

    然而上线后发现这样粗糙的方法根本招架不住,因为这个 MutilpleSelect 选择框对应选择的整个数据库的 tags 标签,而整个数据库的 tags 标签数量有几十万

    这样 form.tags.choices = TagsORM.query.fetchall() 瞬间内存就爆满了

    google 多方搜索,得到的也是用 Select2 (貌似 V2 这里都有用到),我仔细看过文档,发现就是采用 search 大量的数据然后将需要用的 json 数据放到页面上,但是,很多的细节,比如:

    1. 如果表单带有默认的 tags 该如何处理和显示
    2. search 大量数据是否需要优化后端的 mysql index
    3. 对于 Select2 这个与 WTForms 的配合,网上的资料尤其少

    有同学在用 WTForms+Select2 的吗?能否分享一下看法?如果有更好的资料,麻烦丢个链接

    谢谢!

    第 1 条附言    2019 年 2 月 23 日

    经过一个晚上的 debug 顺利解决

    1. 表单带有默认 tags 的,那么 WTForms 直接设置 XXXForm.xxxField.default = [....] 即可,前端 select2 插件会根据你的默认 option 自动转换并显示出来

    2. 几十万的数据,mysql index 不需要优化用 %like% 查询已经很快。再大的数据我手上没有,没法测试。

    3. Select2 这个与 WTForms 完全没有问题,也完全不相干。唯一的就是 WTForms 的 MutilpleSelect 会默认检查表单已有的 choices,不在 choices 里面就抛出 validate error,这个很简单的,只需要自己 overwrite 这个 wtforms.SelectMultipleField 的 pre_validate 为空即可

    最后带个今晚的小坑,要在 MySQL 里面存 emoji 表情,记得将MySQL 全部的字符串字符集都改为 utf8mb4 并且 version > 5.5 不然的话,error throw 得你怀疑人生!

    2 条回复    2019-02-23 18:08:37 +08:00
    jugelizi
        1
    jugelizi  
       2019 年 2 月 23 日
    逻辑有问题啊 不是先放热门标签
    用户输入自动匹配吗
    mywaiting
        2
    mywaiting  
    OP
       2019 年 2 月 23 日
    @jugelizi #1 现在就是这样的逻辑啊,用户输入,然后 auto complete 返回后端已经有的 tag id

    问题不是在于 新建 条目插入 tag,而是 编辑 已有的条目增删 tag

    特别是配合 WTForms+Select2,想找个现成的例子,懒得自己写了............
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1001 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 44ms UTC 23:25 PVG 07:25 LAX 16:25 JFK 19:25
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86