Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 对于一个有很多记录的应用程序,可以在数据库中使用字典吗?_Django_Database Design_Django Models - Fatal编程技术网

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是使用最广泛的免费解决方案)。根据您预期的使用情况,考虑存档以保持您当前的工作数据性能可预测(不断增长的数据集是不令人满意的)。