سؤال

لقد قمت بإنشاء العديد من كائنات Geodata (الاسم ، PostalCode ، LAT ، LON). الآن أريد أن أضعها في مجموعة للبحث عن إدخالات مختلفة لاحقًا.

يجب أن يحدث كل شيء موثوق به/في الذاكرة ، لذلك لا توجد حاجة إلى قاعدة بيانات علائقية.

يشبه هذا الاستعلام:

  • ابحث عن LAT و LON بالاسم أو من فضلك
  • ابحث عن كائنات بين LAT1 و LAT2 و LON1 و LON2

ما هي المجموعة الأفضل لمثل هذه البيانات "البسيطة"؟

ما هو التعقيد اللازم لمثل هذا الاستعلام؟ هل يمكن أن تكون القراءة المتعددة فائدة؟ إذا كان الأمر كذلك ، فما هي المجموعة المستخدمة في أحسن الأحوال لسلامة الخيط؟

هل هناك فرصة لكتابة مثل هذه الاستفسارات في قاعدة بيانات القيمة => القيمة؟

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

المحلول

يمكنك استخدام قاعدة بيانات في الذاكرة.

هذا جيد لأن قواعد البيانات العلائقية جيدة للاستعلامات العلائقية مثل هذه .... :-)


للمنزل جافا النقية, ، يمكنك استخدام:

  1. Map, ، مع الاسم كمفتاح
  2. Map, ، مع بلز كمفتاح
  3. List<List<"object">> مع LAT للحصول على القائمة الأولى ، LON للقائمة الثانية.
    يتم فرز كلاهما ، لذا يمكنك البحث عن قيمة باستخدام البحث الثنائي ، وإعادة فاصل زمني بكفاءة مع subList.

هذا يرقى إلى ازدواجية للمفاتيح ، ولكن ليس لجميع الكائنات ، حيث يمكنك إعادة استخدام نفس كائنات المثيل في جميع هذه الحالات.

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

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

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