ما هو أفضل وسيلة للاستعلام قاعدة بيانات للسجلات ضمن ن ميلا من الرمز البريدي؟

StackOverflow https://stackoverflow.com/questions/527512

سؤال

ولدي قائمة من السجلات في قاعدة البيانات الخاصة بي ويرتبط كل سجل مع الرمز البريدي.

ما هي "الممارسات الفضلى" الاستعلام عن كافة السجلات في قاعدة البيانات للعثور على كافة الإدخالات التي تقع ضمن ن ميلا من الرمز البريدي آخر؟

وكل الرمز البريدي لديه خطوط الطول / العرض ارتبط منذ فترة طويلة معها في قاعدة البيانات لذلك أنا أعلم أنني سوف تضطر إلى استخدام ذلك. ومع ذلك، لا أستطيع أن أتخيل تشغيل أي نوع من صيغة المسافة على كل زوج من رموز البريدي، وتحويل إلى ميلا ورفض تلك التي ليست ضمن دائرة نصف قطرها بلدي.

وهذا يبدو بفظاعة مكلفة حسابيا لمثل استعلام المشترك.

وقد نظرت أنا أيضا القيام على جميع أزواج قبل احتساب لكن يبدو كبير جدا للنظر أيضا. هناك ما يقرب من 40000 ~ رموز البريدي في الولايات المتحدة. لذلك، فإن وجود قاعدة بيانات جميع أزواج من كل الرمز البريدي يكون (40000) ^ 2، أو 1.6billion الإدخالات.

وأنا أعلم أن هذه هي مشكلة مشتركة على مواقع لذلك نأمل شخص يمكن لي نقطة في الاتجاه الصحيح لأفضل وسيلة. أنا أستخدم <القوي> SQL سيرفر 2008 وإذا كانت هناك حلول بنيت قبل هناك ثم كبيرة، لأنني حقا على لا ترغب في إعادة اختراع العجلة في هذه الحالة .


سؤال ذات صلة: الحصول على جميع رموز البريدي داخل دائرة نصف قطرها (هذا لم يساعدني)
أيضا، وأنا أعلم هذا
سورس مشروع لكنه مهجور والتي لم تعد قيد الاستخدام.

هل كانت مفيدة؟

المحلول

وأود أن تشغيل استعلام الذي عاد جميع السجلات بين قوسين في الظرف مربع encompasing دائرة البحث شعاعي (minlat <اللات

إذا أردت الحصول على الهوى، والخادم SQL يدعم المؤشرات المكانية .

نصائح أخرى

أحد المواقع التي تحتاج لتشغيل هذا الاستعلام عن مرة واحدة في الثانية لكل مستخدم ، وهنا ما تعلمت:

أولا، تأكد من الجدول موقعك لديها مؤشرات على اللات وخط الطول. هذا هو الفرق بين 20ms و15S أوقات الاستجابة إذا كان لديك الملايين من السجلات.

وتبدأ مع استعلام المربع المحيط للحصول على مجموعة من المواقع للعمل مع. ثم حساب المسافات على تلك، نوع، وإذا كنت روائح حول دقة، تصفية عدد قليل من.

وبصراحة، أنا لا تقلق بشأن ما قبل حساب أي شيء. وكأنني أقول، وأنا تشغيل هذا النوع من الاستعلام مقابل جدول موقع مع 6،000،000 مداخل، وعادة ما يعود النتائج في <50ms. اعتمادا على احتياجاتك، أن حقا البتة أن تكون سريعة بما فيه الكفاية.

وحظا سعيدا!

وهذا هو في الواقع مشكلة صعبة جدا لحلها. أنصح لك القيام ببعض الغش التي كتبها قبل إنشاء قاعدة بيانات. إنشاء شبكة من أي نوع من التقارب عليك أن تجد، على سبيل المثال، واتخاذ كل 10 ميل في كل اتجاه، إضافة الإدخال إلى قاعدة البيانات لكل البريدي لهذه النقطة الشبكة والمسافة، وبعد ذلك عندما يأتي استعلام في، كنت أول ترجمة نقطة الاستعلام إلى واحدة من نقاط الشبكة الخاصة بك. الآن يمكنك البحث عن المسافة بسهولة تامة.

وهذا الحل يعني أساسا الفضاء التداول لهذا الوقت، حتى تتمكن من الحصول على قاعدة بيانات كبيرة جدا بسرعة. والخبر السار هو: أنه من السهل جدا أن البيانات مؤشر

ويجب أن ننظر في GeoNames.org . يمكنك الاستعلام خدمة ويب للحصول على ما كنت تبحث عنه، أو يمكنك دل قاعدة بيانات ثير.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top