跳转到主要内容

MySQL和Django的近似查询计数。

项目描述

当使用MySQL时,对InnoDB表的所有行进行计数在大型InnoDB表上是非常昂贵的。这是一个当在不附加约束的情况下调用COUNT(*)时返回近似值的QuerySet的替代品。在其他所有情况下,它应该表现得与QuerySet完全相同。

此工具仅适用于MySQL,对所有其他引擎的行为正常。

安装

使用pip从PyPI安装包django-mysql-fuzzycount

$ pip install -U django-mysql-fuzzycount

用法

使用FuzzyCountQuerySet有几种方法。

您可以在Django模型上导入并使用提供的FuzzyCountManager

from django.db import models

from mysql_fuzzycount.managers import FuzzyCountManager

class Choice(model.Model):
    objects = FuzzyCountManager()

    # ...

然后,在没有任何约束的情况下对Choice模型进行计数,将近似总数

>>> Choice.objects.count()  # approximation
100
>>> Choice.objects.filter(votes__gt=10).count()  # not an approximation
28

另一个常见问题是模型在管理界面中的计数。有一个基本的ModelAdmin类,您可以在您的admin.py文件中继承,以防止在加载管理页面时执行昂贵的COUNT(*)查询。在您的模型的一个admin.py文件中

from django.contrib import admin

from mysql_fuzzycount.admin import FuzzyCountModelAdmin

from myapp.models import Choice


class ChoiceAdmin(FuzzyCountModelAdmin):
    pass

admin.site.register(Choice, ChoiceAdmin)

现在,当您加载Choice模型的管理页面时,分页计数将是大致的。

测试

它已在生产环境中进行了测试,但没有单元或集成测试。

许可证

版权©2013,Educreations,Inc,根据MIT许可证。

项目详情


下载文件

下载适合您平台的文件。如果您不确定要选择哪个,请了解更多关于安装包的信息。

源分布

django-mysql-fuzzycount-0.4.tar.gz (4.1 kB 查看散列)

上传时间:

构建分布

django_mysql_fuzzycount-0.4-py2.py3-none-any.whl (4.4 kB 查看散列)

上传时间: Python 2 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面