Несколько десятков тысяч — не столь много для кеширования результатов сортировки.
Допустим PRIMARY KEY является INT, тогда при трех методах сортировки получится ~10000*3*INT, что совсем не много.
Сортировка данных должна происходить после изменения ключевых свойств товара.
Если свойства товара изменяются часто — можно выделить в отдельный «демон».
class ParamOne(models.Model):
title = models.CharField(verbose_name=u'title', max_length=32)
class ParamTwo(models.Model):
title = models.CharField(verbose_name=u'title', max_length=32)
class ParamThree(models.Model):
title = models.CharField(verbose_name=u'title', max_length=32)
class ItemOrdering(models.Model):
item = models.ForeignKey('HabrItem')
paramOne = models.ForeignKey(ParamOne, blank=True, none=True)
paramTwo = models.ForeignKey(ParamTwo, blank=True, none=True)
paramThree = models.ForeignKey(ParamThree, blank=True, none=True)
order = models.IntegerField(verbose_name=u"Order")
class HabrItem(models.Model):
title = models.CharField(verbose_name=u'title', max_length=32)
paramOne = models.ManyToManyField(ParamOne, blank=True, none=True)
paramTwo = models.ManyToManyField(ParamTwo, blank=True, none=True)
paramThree = models.ManyToManyField(ParamThree, blank=True, none=True)
Вот примерно при такой схеме я хочу, чтобы если юзер выбрал параметры к примеру one и three подгрузилась сортировка из ItemOrdering для этого товара с этими двумя параметрами.
Путем нескольких часов найдено сложное решение, которое в принципе работает)
Результат — в базу уходит 1 запрос, слегка модифицируемый руками, то есть выполняется raw sql )
Кому интересен результат?)