【发布时间】:2015-09-09 23:28:10
【问题描述】:
我正在使用 Django/DRF 和 Postgres 为一个接受水疗、沙龙等预订的应用程序构建一个 API。
我希望有大量的提供商(水疗中心)提供类似服务的菜单,但价格不同。
Provider 1 Menu
---------------
Pedicure ($50)
Manicure ($40)
Thai Massage ($100)
Balinese Massage ($120)
Provider 2 Menu
---------------
Pedicure ($60)
Manicure ($50)
Head Massage ($120)
...
Provider 35000 Menu
---------------
Pedicure ($25)
Manicure ($25)
Balinese Massage ($90)
我正在尝试确定合适的模型来代表这种情况
这是我想出的:
class ServiceCategory(models.Model):
Category = models.CharField(max_length=100, blank=True)
def __unicode__(self):
return self.Category
class Service(models.Model):
Category = models.ForeignKey(ServiceCategory)
Name = models.CharField(max_length=100, blank=True)
def __unicode__(self):
return self.Name
class Provider(models.Model):
Manager = models.OneToOneField(User)
Category = models.ForeignKey(ServiceCategory)
Name = models.CharField(max_length=100, blank=True)
def __unicode__(self):
return self.Name
class MenuItem(models.Model):
Provider = models.ForeignKey(Provider)
Service = models.ForeignKey(Service)
Price = models.DecimalField(max_digits=9, decimal_places=2, db_index=True)
def __unicode__(self):
return self.Provider.Name + "-" + self.Service.Name
此结构将如何处理以下类型的查询:
- 检索任何一个供应商的整个菜单以及价格
- 检索提供一类服务(例如按摩)的所有提供商(按地理位置过滤,按价格排序)的列表
- 检索提供指定服务(泰式按摩)的所有提供商的过滤列表
直觉上,我担心MenuItem 的表会很快变得庞大而缓慢,比如 1 到 400 万行,而 AJAX 和移动应用程序也可以通过 API 访问这些表。
有什么更好的方法来为性能建模?
可能是反规范化、PostgreSQL 设置、(mem) 缓存或拆分表?
【问题讨论】:
-
我认为在这个早期阶段没有正确的答案。正确编入索引后,您可能看不到
MenuItem表的任何性能问题。
标签: django database-design django-rest-framework database-schema