কীভাবে Yelp দক্ষতার সাথে ডাটাবেসে দূরত্ব গণনা করতে পারে?


9

উদাহরণস্বরূপ, বলুন আমার কাছে একটি টেবিল রয়েছে:

Business(BusinessID, Lattitude, Longitude)

সব অবশ্যই ইনডেক্স করা হয়। এছাড়াও আছে 1 মিলিয়ন রেকর্ড

বলুন আমি 106,5 এর নিকটতম ব্যবসায়ের সন্ধান করতে চাই, উদাহরণস্বরূপ, আমি কীভাবে এটি করব?

যদি আমি করি

SELECT *
FROM Business
WHERE (Some formula to compute distance here) < 2000

উদাহরণস্বরূপ, বা আমি যদি না

SELECT *
FROM Business
TOP 20

তত্ত্ব অনুসারে কম্পিউটারকে সমস্ত বিজের জন্য দূরত্ব গণনা করতে হবে যখন অনুশীলনে কেবলমাত্র একটি নির্দিষ্ট পরিসরের মধ্যে দ্রাঘিমাংশ এবং দ্রাঘিমাংশ রয়েছে তাদের গণনা করা উচিত।

সুতরাং আমি পিএইচপি, বা এসকিউএল, উদাহরণস্বরূপ কী করতে চাই?

আমি এ পর্যন্ত উত্তর দিয়ে কৃতজ্ঞ। আমি মাইএসকিএল ব্যবহার করছি এবং তাদের কাছে সুস্পষ্ট সমাধানের চেয়ে আরও কার্যকর কিছু নেই। মাইএসকিউএল স্পেসিয়ালটিতে গণনা দূরত্ব ফাংশন নেই।

উত্তর:


8

যদি আমি প্রশ্নটি সঠিকভাবে বুঝতে পারি (এবং আমি নিশ্চিত না যে আমি করছি), আপনি "(Some formula to compute distance here)"প্রতিবার কোনও জিজ্ঞাসা করার সময় সারণীতে প্রতিটি সারির জন্য কম্পিউটিং সম্পর্কে উদ্বিগ্ন ?

এটি সূচকগুলি ব্যবহার করে একটি ডিগ্রীতে হ্রাস করা যেতে পারে latitudeএবং longitudeসুতরাং আমরা কেবলমাত্র বৃত্তটি সহ আমরা চাই এমন একটি পয়েন্টের একটি 'বাক্সের' জন্য দূরত্বটি গণনা করতে পারি:

select * from business
where (latitude>96 and latitude<116) and 
      (longitude>-5 and longitude<15) and 
      (Some formula to compute distance here) < 2000

যেখানে '2000' এর মানটির একক এবং আপনি যে দূরত্ব থেকে গণনা করছেন বিশ্বব্যাপী বিন্দুটি মিলে গেলে 96, 116 ইত্যাদি বেছে নেওয়া হয়েছে।

সূচকগুলি কীভাবে সুনির্দিষ্টভাবে ব্যবহার করে তা আপনার আরডিবিএমএস এবং এর পরিকল্পনাকারী পছন্দগুলির উপর নির্ভর করবে।

সাধারণ ভাষায়, এটি এক ধরণের নিকটবর্তী প্রতিবেশী অনুসন্ধানকে অনুকূল করে তোলার একটি প্রাথমিক উপায় । আপনার RDBMS সমর্থন করে সারকথা ইনডেক্স , মত postgres তারপর আপনি তাদের পরিবর্তে ব্যবহারের বিষয়ে বিবেচনা করা উচিত নয়।


আমি মাইএসকিএল ব্যবহার করেছি। তবে কিছু মাইএসকিএল ইঞ্জিন জিওপ্যাটিয়াল সমর্থন করে যদিও ইনডোডবি না।
user4951

আমি কি ঠিক বলেছি যে আপনার কাছে মাইএসকিউএল থেকে পরিবর্তন করার কোনও বিকল্প নেই? কোন ক্ষেত্রে দয়া করে প্রশ্নটি mysql
জ্যাক বলছেন topanswers.xyz

আসলে আমি এখন মাইসামের সহায়ক টেবিলটি যুক্ত করব এখন কীভাবে দক্ষতার সাথে এটি করব?
ব্যবহারকারী4951

ওয়েল আমি মঙ্গডব ব্যবহার করতে পারি আমি তা স্থির করিনি। তবে আমি মাইএসকিএল-এর সাথে সর্বাধিক পরিচিত।
user4951

1
আমার পরামর্শটি পোস্টগ্র্রেসগুলির সাথে পরিচিত হওয়ার জন্য পরিচিত হতে হবে - যদি মঙ্গোডিবি এর সাথে তুলনা করা হয় তবে এটি মাইএসকিউএলের সাথে অনেক বেশি অনুরূপ এবং স্থানিক ডেটা সহ একটি দৃ history় ইতিহাস রয়েছে এবং আপনার মন্তব্য অন্য কোথাও নির্দেশ দেয় যে আপনি 'ফ্রি' পছন্দ করেন।
জ্যাক বলেছেন টপান্সওয়ার্স.অক্সিজ

6

(প্রকাশ: আমি একটি মাইক্রোসফ্ট এসকিউএল সার্ভার লোক, সুতরাং আমার উত্তরগুলি সে দ্বারা প্রভাবিত হয়))

সত্যিই দক্ষতার সাথে এটি করার জন্য, আপনি চান দুটি জিনিস: ক্যাশিং এবং স্থানীয় স্থানীয় ডেটা সহায়তা। স্থানিক ডেটা সহায়তা আপনাকে ফ্লাইয়ের উপর নিবিড় / ব্যয়বহুল গণনা না করে সরাসরি ডাটাবেসে ভূগোল এবং জ্যামিতির ডেটা সঞ্চয় করতে দেয় এবং আপনাকে খুব দ্রুত আপনার বর্তমান অবস্থানের সবচেয়ে কাছের পয়েন্টটি (বা সবচেয়ে দক্ষ রুট বা যাই হোক না কেন) সন্ধানের সূচী তৈরি করতে দেয়।

আপনি স্কেল, পিরিয়ড করতে চান তবে ক্যাচিং গুরুত্বপূর্ণ। দ্রুততম ক্যোয়ারী হ'ল আপনি কখনও করেন নি। যখনই কোনও ব্যবহারকারী তার নিকটতম জিনিসগুলির জন্য জিজ্ঞাসা করে আপনি তার অবস্থান এবং ফলাফলটি রেডিসের মতো ক্যাশে সংরক্ষণ করেন বা কয়েক ঘন্টা ধরে ম্যাক করে রাখেন। ব্যবসায়ের অবস্থানগুলি 4 ঘন্টার জন্য পরিবর্তিত হচ্ছে না - ভাল, তারা কেউ যদি কোনও ব্যবসায় সম্পাদনা করে তবে আপনার প্রয়োজন হয় না যে তা অবিলম্বে সমস্ত ফলাফলের সেটে আপডেট করা দরকার।


আমি আপনার লিঙ্কটি থেকে কাজ করতে পারছি না যে এসকিউএল সার্ভার সত্যিকারের উপাত্তের উপাত্তকে এমনভাবে উপস্থাপিত করে যা নিকটবর্তী পয়েন্টগুলির তালিকা পাওয়ার জন্য কার্যকর - তা কি করে?
জ্যাক বলছেন topanswers.xyz

দেখে মনে হচ্ছে এটি
হ'ল

জিনিসটি হ'ল আমি মাইএসকিএল ব্যবহার করছি এবং যাখ ডগলাস নির্ধারিতের চেয়ে তাদের কাছে কোনও অ্যালগরিদম বেশি দক্ষ নয় বলে আমি যাচাই করেছি। আমি ভাবছি যদি মাইএসকিএল এই ধরণের জিনিসটি ক্যাশে করার মতো করে তবেই করবে। মাইক্রোসফ্ট এসকিউএল প্রদান করা হয়েছে এবং মাইএসকিউএল বিনামূল্যে
user4951

1
ব্যবসায়ের অবস্থান সব সময় বদলাবে না, তবে লোকজনের অবস্থান হবে।
user4951

0

Yelp সম্ভবত জিআইএস ব্যবহার করে

পোস্টগ্রি সঙ্গে জিআইএস জন্য রেফারেন্স বাস্তবায়ন হয়েছে PostGISYelp মাইএসকিউএল ব্যবহার করতে পারে যা প্রতিটি উপায়ে নিকৃষ্ট হয় । ইয়েল্পের মতো কোনও কিছুর ক্ষেত্রে, তারা অবশ্যই অবশ্যই স্থানাঙ্কগুলি রাখে,

  • ব্যবহারকারী
  • সম্ভাব্য গন্তব্য

এই স্থানাঙ্কগুলি অবশ্যই WGS84 এ রয়েছে এবং ভূগোলের ধরণ হিসাবে সঞ্চিত রয়েছে। পোস্টগ্রিজ এসকিউএল এবং পোস্টজিআইএস এ এটির মতো কিছু দেখাবে,

CREATE TABLE businesses (
  id   int               GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
  name text,
  geog geography(point)
);
CREATE INDEX ON businesses USING gist(geog);
.... fill table
ANALYZE businesses;

তারা সেই টেবিলটি পূরণ করবে। তারপরে তারা আপনার ফোন থেকে WGS84 স্থানাঙ্কগুলি ধরে ফেলবে এবং এসকিউএল অ্যালকেমি (ইয়েলের ক্ষেত্রে) এর মতো একটি কোয়েরি তৈরি করে,

SELECT *
FROM businesses AS b
WHERE ST_DWithin( b.geog, ST_MakePoint(userLong,userLat) );

আরও তথ্যের জন্য আমাদের দেখুন , এবং @ স্ট্যাকএক্সচেঞ্জের ভৌগলিক তথ্য সিস্টেমগুলি দেখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.