Topik ini menjelaskan cara menggunakan struktur data TairGIS dari Tair (Enterprise Edition) untuk mengimplementasikan layanan pembelian lokal.
Informasi latar belakang
Layanan pembelian lokal di platform e-commerce disediakan berdasarkan informasi toko terdekat yang menyediakan produk yang diinginkan oleh konsumen.
Setiap toko yang mendaftar di platform e-commerce memiliki cakupan tersedia untuk pemesanan online. Cakupan tersebut dapat berupa distrik tertentu, area dengan bentuk tidak beraturan, atau lingkaran dengan radius tertentu di sekitar toko. Jika pesanan online dilakukan dalam cakupan tersedia sebuah toko, toko tersebut akan mengambil pesanan tersebut. Jika tidak, toko tersebut tidak tersedia. Skenario ini memerlukan sistem untuk menentukan apakah pesanan online dilakukan dalam cakupan tersedia sebuah toko.
Solusi lama untuk skenario ini biasanya menggunakan MySQL atau PostGIS, yang menyediakan serangkaian API lengkap untuk menangani data sistem informasi geografis (GIS). Namun, kueri bisa lambat di MySQL dan PostGIS karena data disimpan di disk, terutama dalam skenario yang melibatkan volume data besar.
Dalam hal ini, Anda dapat menggunakan TairGIS sebagai gantinya. TairGIS adalah struktur data yang menggunakan indeks R-tree dan mengeksekusi kueri yang melibatkan CONTAINS, WITHIN, atau INTERSECTS dalam hitungan milidetik. Untuk informasi lebih lanjut, lihat GIS.
Solusi
Tambahkan cakupan tersedia toko-toko dari sebuah merek ke TairGIS.
Kueri toko-toko tersedia yang berada dekat dengan konsumen berdasarkan lokasi konsumen.
Contoh kode
Dalam contoh ini, Python 3.8 digunakan, dan Tair-py diinstal. Anda dapat menjalankan perintah pip3 install tair untuk menginstal Tair-py.
# -*- coding: utf-8 -*-
# !/usr/bin/env python
from typing import Dict
from tair import Tair
from tair import ResponseError
def get_tair() -> Tair:
"""
Metode ini digunakan untuk terhubung ke instance Tair.
* host: titik akhir yang digunakan untuk terhubung ke instance Tair.
* port: nomor port yang digunakan untuk terhubung ke instance Tair. Nilai default: 6379.
* password: kata sandi akun database default dari instance Tair. Jika Anda ingin terhubung ke instance Tair menggunakan akun database kustom, Anda harus menentukan kata sandi dalam format username:kata sandi.
"""
tair: Tair = Tair(
host="r-8vb************.redis.zhangbei.rds.aliyuncs.com",
port=6379,
db=0,
password="D******23",
decode_responses=True
)
return tair
def add_brand_store(brandID: str, mapping: Dict[str, str]) -> bool:
"""
Metode ini menggunakan perintah GIS.ADD untuk menambahkan informasi tentang cakupan tersedia toko-toko dari sebuah merek ke TairGIS.
"""
try:
tair = get_tair()
ret = tair.gis_add(brandID, mapping)
return ret == 1
except ResponseError as e:
print(e)
return False
def get_brand_all(brandID):
"""
Metode ini menggunakan perintah GIS.GETALL untuk mengkueri cakupan tersedia semua toko dari sebuah merek.
"""
try:
tair = get_tair()
return tair.gis_getall(brandID)
except:
return None
def get_service_store(brandID: str, user_location: str):
"""
Kueri toko-toko tersedia yang berada dekat dengan konsumen berdasarkan lokasi konsumen.
"""
try:
tair = get_tair()
return tair.gis_contains(brandID, user_location)
except:
return None
if __name__ == "__main__":
tair = get_tair()
# Tambahkan cakupan tersedia dua toko dari brand1.
add_brand_store(
"brand1",
{
"store_1": "POLYGON ((120.14772 30.19513, 120.15370 30.17838, 120.19385 30.18011, 120.18853 30.20817))",
"store_2": "POLYGON ((120.18986 30.20852, 120.19651 30.17988, 120.22512 30.17978, 120.21667 30.22292))"
},
)
print("Kueri semua toko dari brand1 dan cakupan tersedia mereka:")
print(get_brand_all('brand1'))
print("Kueri toko-toko tersedia untuk konsumen yang berlokasi di koordinat (120.19707, 30.19539):")
print(get_service_store('brand1', 'POINT(120.19707 30.19539)'))Contoh keluaran sukses:
Kueri semua toko dari brand1 dan cakupan tersedia mereka.
['store_1', 'POLYGON((120.14772 30.19513,120.1537 30.17838,120.19385 30.18011,120.18853 30.20817))', 'store_2', 'POLYGON((120.18986 30.20852,120.19651 30.17988,120.22512 30.17978,120.21667 30.22292))']
Kueri toko-toko tersedia untuk konsumen yang berlokasi di koordinat (120.19707, 30.19539).
[1, ['store_2', 'POLYGON((120.18986 30.20852,120.19651 30.17988,120.22512 30.17978,120.21667 30.22292))']]Hasil: Toko tersedia untuk konsumen yang berlokasi di koordinat (120.19707, 30.19539) adalah store_2.
Ringkasan
Struktur data geospasial TairGIS dapat membantu pedagang yang terdaftar di platform e-commerce secara akurat dan efisien memberikan layanan pembelian lokal.