遍历表方案 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
itertools

遍历表方案

  •  
  •   itertools Jul 6, 2017 3123 views
    This topic created in 3219 days ago, the information mentioned may be changed or developed.

    一次请求需要从提交的数据中获取一个数组 A,然后,从数据库中遍历某张表的字段 B。最后通过一系列的计算(计算过程包含数组 A 和 B ),每条数据算出一个值,取最高的几个值返回给请求方?请问这样需求有什么好的实现方案,响应时间越短越好。 谢谢!

    10 replies    2017-07-07 17:06:24 +08:00
    Immortal
        1
    Immortal  
       Jul 6, 2017
    能看懂有鬼了- -
    Hieast
        2
    Hieast  
       Jul 6, 2017
    楼主名字很好玩,itertools,再加个 nlargest、map, 应该可以解决楼主的问题了。
    itertools
        3
    itertools  
    OP
       Jul 6, 2017
    @Hieast nlargest 在我的实现中用到了,但是遍历表(如果有表中有上千万条数据),感觉响应时间很慢。
    uxstone
        4
    uxstone  
       Jul 6, 2017
    找个合适的数据结构,先把表中的数据取出来,在代码中写具体的运算逻辑 ?
    itertools
        5
    itertools  
    OP
       Jul 6, 2017
    @uxstone 数据量太大。内存可能会爆。
    Hieast
        6
    Hieast  
       Jul 6, 2017 via Android
    @itertools 流式计算?维护一个 n 个元素的最大堆,用 generator 取一定数量的 B,更新这个堆?

    不过估计这种实现不会比你现在的速度快多少。
    愿意折腾的话用 spark sql ?
    cszeus
        7
    cszeus  
       Jul 7, 2017
    在 B 上面建索引,然后用多线程或者多进程,把 B 里面的东西分成多个部分取出来,分别算,再一起取最大?

    本来上千万条的数据,不需要分表么?
    lxml
        8
    lxml  
       Jul 7, 2017 via Android
    虽然不太清楚具体 B 是什么数据,但一个思路吃把 B 按照跳表的方式弄个多层索引,尽快的优化找 B 的速度。
    Miy4mori
        9
    Miy4mori  
       Jul 7, 2017 via iPhone
    我觉得直接用存储过程快吧,要是读到代码里再算估计 io 开销就够喝一壶了。
    caniuse
        10
    caniuse  
       Jul 7, 2017
    感觉适合用 mapreduce 思想,把任务分割成小任务分配到其他机器上并行
    About     Help     Advertise     Blog     API     FAQ     Solana     4883 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 66ms UTC 03:53 PVG 11:53 LAX 20:53 JFK 23:53
    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