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

आलसी_स्थैतिक के साथ 'प्रतीक्षा' का उपयोग करने का विकल्प! जंग में मैक्रो?

मैं जंग मंचों में किसी के सुझाव के आधार पर इस दृष्टिकोण के साथ गया था।

static MONGO: OnceCell<Client> = OnceCell::new();
static MONGO_INITIALIZED: OnceCell<tokio::sync::Mutex<bool>> = OnceCell::new();

pub async fn get_mongo() -> Option<&'static Client> {
    // this is racy, but that's OK: it's just a fast case
    let client_option = MONGO.get();
    if let Some(_) = client_option {
        return client_option;
    }
    // it hasn't been initialized yet, so let's grab the lock & try to
    // initialize it
    let initializing_mutex = MONGO_INITIALIZED.get_or_init(|| tokio::sync::Mutex::new(false));

    // this will wait if another task is currently initializing the client
    let mut initialized = initializing_mutex.lock().await;
    // if initialized is true, then someone else initialized it while we waited,
    // and we can just skip this part.
    if !*initialized {
        // no one else has initialized it yet, so

        if let Ok(token) = env::var("MONGO_AUTH") {
            if let Ok(client_options) = ClientOptions::parse(&token).await {
                if let Ok(client) = Client::with_options(client_options) {
                    if let Ok(_) = MONGO.set(client) {
                        *initialized = true;
                    }
                }
            }
        }
    }
    drop(initialized);
    MONGO.get()
}


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. HTML में node.js / mongodb . के साथ मनमाना, स्कीमा रहित डेटा कैसे प्रदर्शित करें

  2. SQL NULLIF () समझाया गया

  3. मोंगोइड सत्र को केवल पढ़ने के लिए बनाएं

  4. MongoDb सेलेक्ट क्वेरी इश्यू व्हाइट रेगुलर एक्सप्रेशन (व्हाइट से शुरू होता है और व्हाइट को समाप्त करता है)

  5. rmongodb:$ या क्वेरी में उपयोग करना