假设有某种汽车租赁/销售聚合器。它适用于许多服务提供商(为客户提供汽车)和客户自己。
Django为这种系统做模型的方法是这样的:
class Vendor(models.Model):
name = models.CharField()
class Car(models.Model):
vendor = models.ForeignKey(Vendor,
blank=False,
null=False,
related_name='cars',
on_delete=models.CASCADE)
license_plate = models.CharField(max_length=10, blank=False, null=False)
现在,我们将继续添加客户模型,可能是m2m字段指向汽车通过表格的租金或其他日期。所有供应商只能访问他们的汽车,即使所有汽车都在一张桌子上,他们也会为客户共享一张桌子等。
假设有一些供应商的假设情景,比如十几个,但每个都有很多车 - 数百万,我的问题是:
尝试将Cars模型拆分成多个表会有什么好处(尽管django的原理是一个表 - 一个模型,也许DB侧有好处)?
我说的是供应商分拆 - 即每个供应商都有自己的车牌。
我觉得如果每辆车都有一些描述,比如
desc = models.CharField(max_length=500, blank=True)
那么拆分可能会简化索引吗?不知道。如果有人能澄清这一点,将不胜感激。
无论如何,即使这没有真正的好处,让我们说我决定我真的需要这样做 - 将多个表粘贴到一个Django模型上。 这甚至可能吗?我的想法是尝试SQLAlchemy,看看它在哪里。
我很想看到你如何解决这个问题的任何见解或想法。或链接,如果有类似的东西的文章。
答案 0 :(得分:1)
取决于您要优化的内容。如果您想快速访问某些独特字段,例如汽车VIN,则索引很有帮助。但是,一般来说,数据库将处理查询的性能优化。
如果您的表格非常大(数十亿条记录),您可以查看Instragram did with database sharding。这是如何在多个数据库实例之间拆分表的一个很酷的例子(使用PostgreSQL,但同样适用于任何关系数据库)。
答案 1 :(得分:1)
数据库表分区需要良好的设计和正确的查询。有一个与django一起使用的python app Architect。
Schemaless DB是海量数据的另一种方法,众所周知Uber正在使用它。