MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

एक खोज इंजन के रूप में mongoDB का उपयोग कैसे करें?

MongoDB 3.4rc 2mln रिकॉर्ड के साथ

मुझे लगता है कि आपके कोड की समस्या 'क्वेरी' परम से संबंधित है, क्योंकि आप बिना इंडेक्स के संग्रह पर एक और क्वेरी कर रहे हैं।

अद्यतन करें (परिणाम/आंकड़ों के साथ):

db.runCommand( { dropDatabase: 1 } )

db.createCollection("places"); 

db.places.createIndex( { "locs.loc.coordinates" : "2dsphere" } )


function randInt(n) { return parseInt(Math.random()*n); }
function randFloat(n) { return Math.random()*n; }

for(var j=0; j<10; j++) {  
  print("Building op "+j);
  var bulkop=db.places.initializeOrderedBulkOp() ;
  for (var i = 0; i < 1000000; ++i) {
    bulkop.insert(    
      {
        locs: [
          {
            loc : { 
              type: "Point", 
              coordinates: [ randFloat(180), randFloat(90) ] 
            }
          },
          {
            loc : { 
              coordinates: [ randFloat(180), randFloat(90) ] 
            }
          }
        ]
      }  
    )
  };
  print("Executing op "+j);
  bulkop.execute();
}

यह प्रश्न है:

db.runCommand(
   {
     geoNear: "places",
     near: { type: "Point", coordinates: [ 73.9667, 40.78 ] },
     spherical: true
   }
)

58ms:

2ms सेकंड रन:

db.runCommand(
   {
     geoNear: "places",
     near: { type: "Point", coordinates: [ 73.9667, 40.78 ] },
     spherical: true,
     query: { category: "private" }
   }
)

156996ms:

"श्रेणी" अनुक्रमणिका बनाने के बाद:{ locs.loc.coordinates:"2dsphere", श्रेणी:1 }

13562ms:

अपडेट करें: "maxDistance" जोड़कर आप 396ms . प्रदर्शन कर सकते हैं बनाम 6863ms

db.runCommand(
   {
     geoNear: "places",
     near: { type: "Point", coordinates: [ 73.9667, 40.78 ] },
     spherical: true,
     query: {category: "private"},
     maxDistance: 1000000
   }
)

अधिकतम दूरी:1000000

"stats" : {
    "nscanned" : NumberInt(107820), 
    "objectsLoaded" : NumberInt(1), 
    "avgDistance" : 938598.1782650856, 
    "maxDistance" : 938598.1782650856, 
    "time" : NumberInt(396)
}

बिना "मैक्सडिस्टेंस" के:

db.runCommand(
   {
     geoNear: "places",
     near: { type: "Point", coordinates: [ 73.9667, 40.78 ] },
     spherical: true,
     query: {category: "private"}
   }
)

"stats" : {
    "nscanned" : NumberInt(2023916), 
    "objectsLoaded" : NumberInt(6), 
    "avgDistance" : 3013587.205365039, 
    "maxDistance" : 4263919.742779636, 
    "time" : NumberInt(6863)
}

स्रोत:https://www.mongodb .com/blog/post/geospatial-performance-improvements-in-mongodb-3-2

इससे भी अधिक आपकी क्वेरी "निर्देशांक की एक सरणी" का उपयोग कर रही है जो मुझे लगता है कि बेकार है क्योंकि एक वस्तु (आमतौर पर) में 1 भौगोलिक स्थान बिंदु होता है।

ऑप्टिमाइज़ करने का दूसरा तरीका है "geoWithin . बनाना " चूंकि "दूरी" के आधार पर छँटाई नहीं कर रहा है (शायद आप "सर्वाधिक मत वाले रेस्तरां" के आधार पर छाँटना चाहते हैं)। परिदृश्य के आधार पर।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB शेयर और असंतुलित एकत्रीकरण भार

  2. सी # मोंगोडीबी ड्राइवर v2.0 में कनेक्शन की स्थिति कैसे प्राप्त करें?

  3. नेवला node.js . में बहु-किरायेदारी समर्थन के लिए कनेक्शन बनाता है

  4. क्लाउड में MongoDB बैकअप स्टोर करने के लिए टिप्स

  5. कमांड के माध्यम से मोंगोडब डेटा और लॉग फाइल लोकेशन कैसे खोजें?