पाठ 32 / 32

एक राइड-शेयरिंग मैचिंग सिस्टम डिज़ाइन करें

लगभग रीयल टाइम में राइडर को नज़दीकी ड्राइवर से मिलाना।

आवश्यकताएँ

ड्राइवर लगातार अपनी लोकेशन स्ट्रीम करते हैं; एक राइडर ट्रिप का अनुरोध करता है और कुछ सेकंड के भीतर किसी नज़दीकी उपलब्ध ड्राइवर से मिलाया जाना चाहिए; सिस्टम को बिना गिरे उछाल (कॉन्सर्ट खत्म होना) झेलना चाहिए।

जियोस्पेशियल इंडेक्सिंग

जियोहैशिंग या एक क्वाडट्री का उपयोग करके मानचित्र को कोशिकाओं में बाँटें, और cell -> उपलब्ध ड्राइवर का एक इन-मेमोरी इंडेक्स रखें। एक मैच क्वेरी धरती के हर ड्राइवर को स्कैन करने के बजाय राइडर की कोशिका और उसके चारों ओर फैलती रिंग खोजती है।

एयर ट्रैफ़िक कंट्रोल, फ़ोन बुक नहीं

आप हर ड्राइवर के सटीक पते की सूची स्कैन करके नज़दीकी ड्राइवर नहीं ढूँढ़ते, फ़ोन बुक की तरह। यह लाइव रडार ग्रिड देखते एयर ट्रैफ़िक कंट्रोल जैसा ज़्यादा है — ड्राइवर लगातार अपनी कोशिका अपडेट करते हैं, और मैचर केवल आसपास की मुट्ठी भर ब्लिप देखता है।

रेस संभालें: दो राइडर, एक ड्राइवर

दो मैच रिक्वेस्ट एक साथ एक ही ड्राइवर को लक्ष्य बना सकती हैं। एक एटॉमिक compare-and-set (या प्रति-ड्राइवर लॉक) उपयोग करें ताकि ठीक एक रिक्वेस्ट ड्राइवर जीते और दूसरी अगले-नज़दीकी उम्मीदवार पर रिट्राई करे।