Django 对于一个有很多记录的应用程序,可以在数据库中使用字典吗?
我正在开发一款能够处理大量信息的应用程序,并且正在寻找创建模型的最佳方法。因为我从来没有使用过处理这么多记录的应用程序,所以数据库优化不是我知道很多的话题,但在我看来,一个好的设计是一个很好的开始 现在,我有一个客户表、一个产品表和一个产品客户表(因为我们为客户购买的每个产品分配了一个代码)。因为我想跟踪余额,所以还有一个余额表。我的模特现在看起来像这样:Django 对于一个有很多记录的应用程序,可以在数据库中使用字典吗?,django,database-design,django-models,Django,Database Design,Django Models,我正在开发一款能够处理大量信息的应用程序,并且正在寻找创建模型的最佳方法。因为我从来没有使用过处理这么多记录的应用程序,所以数据库优化不是我知道很多的话题,但在我看来,一个好的设计是一个很好的开始 现在,我有一个客户表、一个产品表和一个产品客户表(因为我们为客户购买的每个产品分配了一个代码)。因为我想跟踪余额,所以还有一个余额表。我的模特现在看起来像这样: class Customer(models.Model): first_name = models.CharField(max_le
class Customer(models.Model):
first_name = models.CharField(max_length=35)
last_name = models.CharField(max_length=35)
customer_ID= models.IntegerField(primary_key=True)
phone = models.CharField(max_length=10, blank=True, null=True)
class Product(models.Model):
product_ID = models.IntegerField(primary_key=True)
product_code = models.CharField(max_length=25)
invoice_date = models.DateField()
employee = models.ForeignKey(Employee, null=True, blank=True)
product_active = models.BooleanField()
class ProductCustomer(models.Model):
prod = models.ForeignKey(Product, db_index=True)
cust = models.ForeignKey(Customer, db_index=True)
product_customer_ID = models.IntegerField(primary_key=True)
[...]
class Balance(models.Model):
product_customer = models.ForeignKey(ProductCustomer, db_index=True)
balance = models.DecimalField(max_digits=10, decimal_places=2)
batch = models.ForeignKey(Batch)
[...]
应用程序将返回客户的“历史记录”。如果pax在某个时间点过期,然后他付款,然后到期退款,等等。
我在想是否应该在Pax表中插入一个字符域,该字符域将保存一个带有日期:status的字典(当我上传信息时,可以计算该状态并将其添加到字典中),或者对余额表进行查询是否更有效,或者是否有更好的解决方案需要实施。
由于有数千种产品,甚至更多的客户,我们每周讨论大约40万条余额记录。。。我担心如何确保应用程序顺利运行。如果我理解你的问题,你似乎在问加入条件是否会对你的查找查询造成不合理的负担。在某种程度上,这取决于您的rdbms。我的建议是使用PostgreSQL over MySQL,因为MySQL的innodb表针对主键查找进行了大量优化,这意味着必须遍历两个B树才能找到连接上的记录。另一方面,PostgreSQL允许对表进行物理扫描,这意味着外键查找通常要快一点
总的来说,是的,字典方法适用于有大量记录的应用程序。问题通常来自您如何查询以及在给定查询中提取多少记录。这比存储多少记录要大得多,至少对于像PostgreSQL这样的数据库来说是这样。400K并不是很多。您使用的是什么数据库引擎?这比任何其他因素都重要。您使用的是什么web服务器和缓存?这也比什么都重要。我知道40万不是很多,但我的意思是你每周增加大约40万,所以他们加起来很快。现在我将使用sqlite3进行测试,但我还没有决定使用什么来实现生产版本,因为这将只能从办公室的内部网访问。有什么建议吗?我的建议是设计它,不管它对你来说是否正确,当你得到它们时,看看性能方面的考虑。正如S Lott所说,数据库引擎将起到非常重要的作用(MySQL和PostgreSQL是使用最广泛的免费解决方案)。根据您预期的使用情况,考虑存档以保持您当前的工作数据性能可预测(不断增长的数据集是不令人满意的)。