Skip to main content

A Django model manager providing fast / fuzzy counts for PostgreSQL database tables.

Project description

Created by Stephen McDonald

Introduction

Up until PostgreSQL 9.2, COUNT queries generally required scanning every row in a database table. With millions of rows, this can become quite slow. One work-around for this is to query statistics in PostgreSQL for an approximate row count, which in many cases is an acceptable trade-off.

Given a table called bigdata, the following query will return an approximate row count:

SELECT reltuples FROM pg_class WHERE relname = 'bigdata';

You can read more information about slow COUNT queries in PostgreSQL in the PostgreSQL wiki.

What django-postgres-fuzzycount provides is a way of using this approach directly in your Django model managers. It was originally built for displaying statistics in the kouio RSS reader, a popular alternative to Google Reader, that acquired over 5 million news articles in its database during the first week of its launch.

Installation

The easiest way to install django-postgres-fuzzycount is directly from PyPi using pip by running the following command:

$ pip install -U django-postgres-fuzzycount

Otherwise you can download and install it directly from source:

$ python setup.py install

Usage

By using the fuzzycount.FuzzyCountManager on your Django models, its count() method will return an approximate value when querying PostgreSQL tables without any WHERE OR HAVING clauses:

from django.db import models
from fuzzycount import FuzzyCountManager

class BigData(models.Model):

    big = models.BooleanField(default=True)
    data = models.TextField()

    objects = FuzzyCountManager()

BigData.objects.count()  # Uses fuzzycount
BigData.objects.filter(id__gt=9000).count()  # Doesn't use fuzzycount

The fuzzycount.FuzzyCountManager also checks the database engine being used, and only applies the approximate count query when using PostgreSQL, so other database backends can be used and will behave as usual (for varying definitions of usual, depending on the database :-).

Inspiration

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-postgres-fuzzycount-0.1.7.tar.gz (4.0 kB view details)

Uploaded Source

Built Distribution

django_postgres_fuzzycount-0.1.7-py2.py3-none-any.whl (5.7 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file django-postgres-fuzzycount-0.1.7.tar.gz.

File metadata

File hashes

Hashes for django-postgres-fuzzycount-0.1.7.tar.gz
Algorithm Hash digest
SHA256 b9e2c431d013a73965d76a369086f3f8bc97d0774dff635b9881470d88aff821
MD5 8fe868fed15e34819951c4e729ee78cf
BLAKE2b-256 7dc193d41c0d9265094d58644b4287597e866885c9ecf021f5bc92aab26b8e64

See more details on using hashes here.

File details

Details for the file django_postgres_fuzzycount-0.1.7-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for django_postgres_fuzzycount-0.1.7-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 aba4d96f31f57d2a5a50804e4ea6c3bca56ca6e255fe9515965134eae9b786a0
MD5 e164cebe7f6c364075a5aac65359153b
BLAKE2b-256 ace465a109c081146b53436fcc333800fafbaf5a2b7361baa13b618a5a1d3971

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page