2016-03-30 18 views
1

Aerospike 2 düğüm kümesinde birden çok iş parçacığı kullanarak 10 Milyon kaydı eklemek için Aerospike AsyncClient ve Aerospike UDF modülünü kullanıyorum. i izleyin adımlar şunlardır:Aerospike AsyncClient tüm işlemi tamamlayana kadar nasıl beklemeli?

  1. 10 iş parçacığı ve tüm parçacığı bir infaz hizmet komutunu

    yürütmek aynı AsyncClient

  2. Çalıştır bir döngü 10 Milyon zaman kullanmak ve çağırmak için kodunun altına kullanacağı düzenlendi (int 1-0; i < 10000000; i ++) { final int j = i; executorService.execute (yeni Runnable() { public void run() { etmektedir ("test", "BÖLMEADI", "setName", j, listesi 1, Listesi 2, aerospikeClient); } }); }

özel boşluk koymak (string ad, dize isimAta, dize BÖLMEADI, Dize keyVlaue, Liste campaignsIdsToBeAdd, Liste campaignsIdToBeRemoved, AsyncClient aerospikeClient) { Anahtar yeni = anahtar Anahtarı (ad, isimAta, keyVlaue); aerospikeClient.execute (writePolicy, yeni WriteHandler(), anahtar, "aerospike_udf", "update_record", Value.get (campaignIdsToBeAdd), Value.get (campaignIdToBeRemoved), Value.get (binName)); }

  • infaz çıkışında bir kez i public void (kapalı
  • yakın yöntem arıyorum

      ) { System.out.println ("=== 1");

      if(aerospikeClient != null && aerospikeClient.isConnected()) 
           aerospikeClient.close(); 
          if(executorService != null && !executorService.isShutdown()) 
           executorService.shutdown(); 
      } 
      
      1. infaz hizmet ve orada hiçbir ekleme vardır gerçekleşmesi ve ben gönderilen veri kaybetme olduğumu AsyncClient hemen ve sonra durdurun.

      2. Bunu çözmemde bana yardımcı olan var mı? veya AsyncClient'i Aerospike udf işleviyle birlikte kullanmanın daha iyi bir yolunu öneriyorum.

      3. Bunu senkronizasyon istemcisi kullanarak yapmaya çalıştım, ancak tüm değeri eklemek 70 dakika sürdü, ancak 5 dakika içinde tamamlamak istiyorum. i birden iplik arasındaki Sync istemcisi kullanmaya çalıştığında Ve düzenli okuma/yazma işlemleri daha yavaş UDF'leri çalıştıran istemci zaman aşımı istisna

    +0

    Promise.sequence (promise1, promise2, ...) 'denemek' UDF – Aaron

    cevap

    2

    görünüyor atıyor. Bu yüzden, zaman uyumsuz çağrıların bitmesini bekleseniz bile, 5 dakikadan fazla sürebilirdiniz. Performans gereksinimlerinizi karşılamak için kümeyi boyutlandırmanız gerekir. Yani, programlama dışı alternatiflere de bakmanız gerekiyor.

    • Daha fazla düğümün olması, udfs'yi paralel olarak yürütmeye yardımcı olur ve genel süreyi azaltır.
    • Uygulamada udf mantığını uygularsanız performansa bakın. Bazı hesaplama maliyetleri müşterilere taşındığından dolayı Sever daha az çalışacaktır.
    +0

    i get yapıyorum ve sonra at-en 10 büyüklüğünün harita üzerinde çapraz, bir sürü sözü dizisi üzerinde bekleyin ve ardından aerospike güncellemek için küme, çoğaltma faktörü 2 olan 2 düğüm içerir. Ben iş parçacığı yürütme tamamlanıncaya kadar veya belirli bir süre için bekleyebildiğin iş parçacığı içinde benzer bir özellik istiyorum. – visingh

    +0

    Yalnızca 2 düğümünüz varsa ve genişleyemiyorsanız, udf dışı yolu deneyin. Haritayı alın ve doğrudan istemcinizde işleyin ve geri yazın. Yazıcınızı aynı anahtar için istemciler arasında senkronize etmek istiyorsanız, check-ve-set'i (CAS) kullanın. – sunil

    İlgili konular