ฉันมีโมเดลสถานที่:
class Place(models.Model):
... some not interesting fields
distances = models.JSONField()
ใน JSONField (ระยะทาง) จะเก็บข้อมูลดังนี้:
{
'1': 10
'2': 20
'3': 30
'4': 40
...
'1000': 10000
}
โดยที่คีย์คือ 'id' ของโมเดลตำแหน่งบางรุ่น และความคุ้มค่า - 'time in road' ไปยังตำแหน่งนี้จากสถานที่นี้
หากผู้ใช้เว็บไซต์เลือกตำแหน่ง ฉันจะแสดงสถานที่ตามลำดับจากใกล้ที่สุดไปยังเพิ่มเติมไปยังตำแหน่งที่เลือก:
places = Place.objects.all().order_by(
RawSQL('distances->%s', (str(selected_location_id),))
)
และทุกอย่างเจ๋งยกเว้นประสิทธิภาพ
แต่ PostgreSQL รองรับการจัดทำดัชนีสำหรับฟิลด์ JSONB (ซึ่งใช้ Django สำหรับ JSONField):
GIN, btree และ แฮช
- ความแตกต่างระหว่างพวกเขาคืออะไร? อันไหนที่เหมาะกับตัวอย่างของฉัน?
- django รองรับ db_index บน JSONField หรือไม่ ถ้าใช่จะระบุได้อย่างไรว่าจะใช้ดัชนีใด?
ขอบคุณมากสำหรับความช่วยเหลือ!