У меня есть модель Place:
class Place(models.Model):
... some not interesting fields
distances = models.JSONField()
В JSONField (расстояния) хранится что-то вроде:
{
'1': 10
'2': 20
'3': 30
'4': 40
...
'1000': 10000
}
где ключ — это «id» какой-либо модели локации, а значение — «время в пути» до этой локации из этого места
Если пользователь веб-сайта выбирает местоположение, я показываю места в порядке от ближайшего к выбранному местоположению:
places = Place.objects.all().order_by(
RawSQL('distances->%s', (str(selected_location_id),))
)
И все круто, кроме производительности.
Но PostgreSQL поддерживает индексирование полей JSONB (которые используют Django для JSONField):
GIN, btree и хэш
- Какие различия между ними? Что подходит для моего примера?
- Поддерживает ли django db_index в JSONField? Если да, то как указать, какой индекс использовать?
Большое спасибо за помощь!