Py学习  »  问与答

如何用Django和mysql自动分天建表

浩宇天罡 • 9 年前 • 8218 次点击  

最近刚接手一个项目用Django和mysql写的,由于数据量过大,每天有几百万条,现在都在一个表里面查询速度太慢了,现在小弟想把每天的数据单独存放在一个表里,每天自动建表(例如:xxx_20141215)并存储数据,但是不知道怎么实现,希望大侠们帮忙解答下……

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/845
 
8218 次点击  
文章 [ 5 ]  |  最新文章 9 年前
易冷天涯
Reply   •   1 楼
易冷天涯    9 年前

提供个思路。没试过,不知道是否可行。

把表的抽象结构定义出一个Model,但记得加上

    class Meta:
        abstract=True

好了,你得到了一个模型的抽象类。抽象类在syncdb时候不会被建成表。

然后,写一个按照日期动态生成类的东东。比如你的抽象类叫MyModel的话。

def gen_model_by_date(dt=None):
    if dt is None:
        dt = datetime.datetime.today()
    new_model_name = 'MyModel_{d}'.format(d=dt.strftime('%Y%m%d'))
    new_model = type(new_model_name, (MyModel, ), {})
    return new_model

然后这张表的所有逻辑里,都用这个方法来代替原model。

django代码相关应该也许这么就搞得定吧。 至于表……写SQL每天定时建表,建表以保证不会出现要用的表还没建好的情况就行了。

没试过,不好用的话大家不要骂我……

Py站长
Reply   •   2 楼
Py站长    9 年前

@浩宇天罡 没试过 django 表名动态的做法额。。你可以搜看看

你可以每个月分一次表,每天分表有点太重了。。

olivetree
Reply   •   3 楼
olivetree    9 年前

我觉得你可以考虑分区,当然,如果历史数据不需要了,分表当然是更好的选择。

浩宇天罡
Reply   •   4 楼
浩宇天罡    9 年前

@Django中国社区 多谢解答,如果我定时让mysql自己建表的话,django的model每天都要改吗,如果不改model的话他能访问到新建的数据表吗,谢谢了~

Py站长
Reply   •   5 楼
Py站长    9 年前

你可以写SQL每天定期执行来分表,注意的是,分表时要停服。

其实你可以做成 按 用户ID来分表?