V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
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
Linxing
V2EX  ›  Python

公司项目没人带 只能自己摸索 来问大佬们一个问题

  •  
  •   Linxing ·
    linxing · 2018-03-11 10:42:57 +08:00 · 2193 次点击
    这是一个创建于 2477 天前的主题,其中的信息可能已经有所发展或是发生改变。
    公司做的是一个交易系统后台信息的展示 交易量每个月大概会有几百万笔 不排除后期会有几千万条记录甚至上亿的交易记录 目前几十万笔交易的查询展示我都觉得还好 把 sqlalchemy 查到的 resultset 遍历一遍 放到一个列表中 然后转换成 json 返回给前台 用 jq 的 datatables 的去展示 但是如果几千万条的记录 我中间要怎么处理吗 程序卡在了把结果集放到列表的这个过程中 求大佬们指教下 没写过这么大数据量的东西
    loongwang
        1
    loongwang  
       2018-03-11 12:46:24 +08:00
    不做分页吗
    xpresslink
        2
    xpresslink  
       2018-03-11 14:32:24 +08:00
    说心理话没明白你的需求。
    使用的数据库的原则就是,尽量减小 IO 交互。
    方案一、一次性把要用的数据全部取出,放在内存缓存,以后不再访问数据库。
    方案二、每次只取用到的最小集合。

    为了支持方案二,所有数据库都支持 where 子句和 limit 语法。
    select * from table limit m,n
    其中 m 是指记录开始的 index,从 0 开始,表示第一条记录
    n 是指从第 m+1 条开始,取 n 条。

    在常见 ORM 中:
    SA 用的是.filter().limit().offset() 来实现对应的 SQL
    Django 的 ORM 更简洁一些,Model.objects.filter()[m:n]
    Linxing
        3
    Linxing  
    OP
       2018-03-11 16:11:16 +08:00
    @loongwang sqlalchemy 执行 SQL 语句生成的 RowProxy 要自己写分页吧??
    Linxing
        4
    Linxing  
    OP
       2018-03-11 16:12:53 +08:00
    @xpresslink 研究了大半天 我大概摸清套路了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2701 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 05:15 · PVG 13:15 · LAX 21:15 · JFK 00:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.