گوفر کے نقطہ نظر سے ، CUCKOO بمقابلہ بلوم فلٹر

اس مضمون میں ، میں ایک بلوم فلٹر کے اوپر کویل فلٹر کی کارکردگی کو نافذ کرنے اور جانچنے کی کوشش کر رہا ہوں۔ (گولڈ میں تقسیم شدہ ہیش ٹیبل کو نافذ کرتے ہوئے ، راگ ڈی ایچ ٹی پر پچھلی پوسٹ پڑھیں)

تعارف

امکانی اعداد و شمار کے ڈھانچے بہت مفید ہیں ، خاص طور پر جب بڑے ڈیٹا سیٹ پر کارروائی کرتے ہو۔ اکثر اوقات ، جب چیزوں کے اعداد و شمار پر کام کرتے ہوئے ، ایک سادہ کام کرنا چاہے گا "جو شے موجود نہیں ہے" یا "وہ چیز پہلے سے موجود ہے" جب حقیقی وقت کے اعداد و شمار پر کارروائی کی جائے۔ کہتے ہیں کہ آپ حقیقی وقت میں سوالات کے جوابات دینا چاہتے ہیں ، جیسے منفرد آئی پی ایس کی تعداد ، اکثر آئی پی ایس ، اگر کسی اشتہار کو کسی صارف کو پہلے ہی پیش کیا گیا ہو تو ، احتمال سے متعلق ڈیٹا ڈھانچے کا استعمال ان سوالات کے جوابات کے ل a جگہ کا موثر طریقہ مہیا کرتا ہے۔ اس طرح کے سوالات کے لئے عمومی نقطہ نظر میں یا تو ہش میپ یا ہیش ٹیبل استعمال کرنا ہوتا ہے ، یا اسے ذخیرہ کرنا کچھ بیرونی کیشے (جیسے ریڈیس) ہوتا ہے ، لیکن مسئلہ بڑے ڈیٹاسیٹوں کا ہے ، یہ آسان ڈیٹا ڈھانچے میموری میں فٹ نہیں ہوسکتے ہیں۔ یہ وہ جگہ ہے جہاں امکانی اعداد و شمار کے ڈھانچے اپنے جگہ اور وقت کے فوائد کی وجہ سے کام میں آتے ہیں۔

مثال کے طور پر معاملات استعمال کریں

  • گوگل بگ ٹیبل ، اپاچی ایچ بیس اور اپاچی کیسینڈرا ، اور پوسٹگریس سکل بلوم فلٹرز کا استعمال غیر موجود قطاروں یا کالموں کیلئے ڈسک کی تلاش کو کم کرنے کے لئے کرتے ہیں۔ مہنگا ڈسک نظر سے بچنے سے ڈیٹا بیس کے استفسار کی کارکردگی میں کافی حد تک اضافہ ہوتا ہے۔
  • میڈیم بلوم فلٹرز کا استعمال کرتے ہوئے یہ چیک کرنے کے لئے استعمال کرتا ہے کہ آیا کسی صارف کو مضمون کی سفارش کی جاچکی ہے
  • ایتھریم بلاکچین پر تیزی سے نوشتہ جات تلاش کرنے کے لئے بلوم فلٹرز کا استعمال کرتا ہے
  • گوگل کروم ویب براؤزر نے خراب URLs کی شناخت کے لئے بلوم فلٹر کا استعمال کیا۔ کسی بھی بلوم کو پہلے کسی بلوم فلٹر کے خلاف چیک کیا گیا تھا ، اور صرف اس صورت میں جب بلوم فلٹر نے مثبت نتیجہ واپس کیا تھا تو انجام دیئے گئے یو آر ایل کی مکمل جانچ پڑتال ہوگی (اور صارف نے متنبہ کیا ، اگر وہ بھی مثبت نتیجہ واپس کرتا ہے)

"کوکو" میں کیا ہے؟

ہم نے ڈیٹا پلیٹ فارم پر اس طرح کے سوالات کے جوابات دینے کے لئے متعدد مقامات پر بلوم فلٹرز کا استعمال کیا ہے۔ حال ہی میں میں نے اس کاغذ کوکو فلٹر پر پایا جس میں میری دلچسپی لگی۔ عنوان خود ہی کہتا ہے ، "کوکو فلٹر: عملی طور پر بلوم سے بہتر ہے" ، لہذا میں نے اسے جانچنے کا فیصلہ کیا۔

بلیک فلٹر کے ڈیزائن کے مطابق کوکو فلٹرز کو حذف کرنے ، محدود گنتی ، اور غلط جھوٹی مثبت احتمال کی پیش کش کرتے ہوئے بہتر بناتے ہیں ، جبکہ ابھی بھی اسی طرح کی جگہ کی پیچیدگی برقرار ہے۔ وہ تصادموں کو حل کرنے کے لئے کوکو ہیشنگ کا استعمال کرتے ہیں اور بنیادی طور پر ایک کمپیکٹ کوکو ہیش ٹیبل ہیں۔

جب کوائف اور بلوم فلٹرز دونوں سیٹ سیٹ ممبرشپ ٹیسٹنگ کے ل useful مفید ہوتے ہیں جب اصل ڈیٹا کا سائز بڑا ہوتا ہے۔ وہ دونوں صرف 7 بٹس فی اندراج استعمال کرتے ہیں۔ یہ اس وقت بھی مفید ہیں جب ایک سیٹ ممبرشپ ٹیسٹ کے ذریعہ پھانسی سے قبل مہنگے آپریشن سے بچا جاسکتا ہے۔ مثال کے طور پر ، کسی ڈیٹا بیس سے استفسار کرنے سے پہلے ، ایک سیٹ ممبرشپ ٹیسٹ کروایا جاسکتا ہے کہ آیا مطلوبہ اعتراض ڈیٹا بیس میں بھی ہے یا نہیں۔

الگورتھم

فلٹر کے پیرامیٹرز:
1. دو ہیش افعال: h1 اور h2
2. این بالٹیوں کے ساتھ ایک سرنی B۔ I-th بالٹی B [i] کہلائے گی

ان پٹ: ایل ، کوکو فلٹر میں داخل کرنے والے عناصر کی ایک فہرست۔

الگورتھم:
جبکہ L خالی نہیں ہے:
    X کو فہرست میں ایل کا پہلا آئٹم بننے دیں۔ ایکس کو فہرست سے نکالیں۔
    اگر B [h1 (x)] خالی ہے:
        بی [h1 (x)] میں x رکھیں
    دوسری صورت میں ، اگر B [h2 (x) خالی ہے]:
        بی [h2 (x)] میں x رکھیں
    اور:
        آئیے B [h2 (x)] میں عنصر بنیں۔
        Y کو L پر تیار کریں
        بی [h2 (x)] میں x رکھیں

عمل آوری

عمل درآمد بالکل سیدھا لگتا ہے ، لہذا میں نے فیصلہ کیا کہ اس پر جاؤں اور اس بات کا موازنہ کیا جائے کہ اس کا موازنہ کسی بلوم فلٹر کے ساتھ کس جگہ / وقت سے ہوگا۔ کوکو فلٹر ایک کوکو ہیش ٹیبل پر مشتمل ہے جو داخل کردہ آئٹمز کے ’فنگر پرنٹس‘ اسٹور کرتا ہے۔ کسی آئٹم کا فنگر پرنٹ تھوڑا سا تار ہوتا ہے جو اس شے کے ہیش سے اخذ کیا جاتا ہے۔ ایک کویل ہیش ٹیبل بالٹیوں کی ایک صف پر مشتمل ہے جہاں ڈالنے والی چیز کو دو ہیش افعال کی بنیاد پر دو ممکنہ بالٹیوں سے میپ کیا جاتا ہے۔ ہر بالٹی کو متغیر نمبر کے فنگر پرنٹ کو ذخیرہ کرنے کے لئے تشکیل دیا جاسکتا ہے۔ عام طور پر ، کوکو فلٹر کی شناخت اس کے فنگر پرنٹ اور بالٹی کے سائز سے ہوتی ہے۔ مثال کے طور پر ، (2،4) کوکو فلٹر 2 بٹ لمبائی کے فنگر پرنٹ اسٹور کرتا ہے اور کوکو ہیش ٹیبل میں ہر بالٹی 4 فنگر پرنٹ رکھ سکتا ہے۔

اندراج

الگورتھم:

f = فنگر پرنٹ (x)؛
i1 = ہیش (x)؛
i2 = i1 ⊕ ہیش (f)؛
اگر بالٹی [i1] یا بالٹی [i2] میں خالی اندراج ہے
   اس بالٹی میں ایف شامل کریں؛
   واپس ہو گیا؛
// موجودہ اشیاء کو منتقل کرنا ضروری ہے۔
i = تصادفی i1 یا i2 منتخب کریں؛
کے لئے n = 0؛ n <میکسم نکس؛ n ++ کرتے ہیں
   بالٹی سے تصادفی طور پر انٹری کا انتخاب کریں [i]؛
   تبادلہ ای اور فنگر پرنٹ اندراج میں محفوظ ہے۔
   i = i ⊕ hash (f)؛
   اگر بالٹی [i] میں خالی اندراج ہے
      ایف کو بالٹی میں شامل کریں [i]؛
      واپس ہو گیا؛
// ہیش ٹیبل مکمل سمجھا جاتا ہے؛
واپسی میں ناکامی؛

کوڈ:

تلاش کریں

الگورتھم:

f = فنگر پرنٹ (x)؛
i1 = ہیش (x)؛
i2 = i1 ⊕ ہیش (f)؛
اگر بالٹی [i1] یا بالٹی [i2] میں f ہے
    سچ واپس؛
جھوٹی واپس؛

کوڈ:

حذف کریں

الگورتھم:

f = فنگر پرنٹ (x)؛
i1 = ہیش (x)؛
i2 = i1 ⊕ ہیش (f)؛
اگر بالٹی [i1] یا بالٹی [i2] میں f ہے
   اس بالٹی سے ایف کی ایک کاپی نکالیں۔
   سچ واپس؛
جھوٹی واپس؛

کوڈ:

کارکردگی کا امتحان

میں نے بلوم فلٹر کے ٹیسٹ کے لئے ول فٹزجیرالڈ لائبریری کا استعمال کیا ہے۔ کوکو فلٹر کے ل taken FPP (غلط مثبت احتمال) راشن 0.001 ہے

خلائی پیچیدگی

کویل اور بلوم فلٹرز کے حوالے سے ، وہ مختلف غلط مثبت امکانات پر مختلف انداز میں کارکردگی کا مظاہرہ کرتے ہیں۔ جب فلٹر کا غلط مثبت امکان 3 فیصد سے کم یا اس کے برابر ہوتا ہے تو ، کوکو فلٹر میں ہر داخل ہونے میں کم بٹس ہوتے ہیں۔ جب یہ زیادہ ہوتا ہے تو ، بلوم فلٹر میں فی داخل ہونے والے بٹس کم ہوتے ہیں۔

وقت کی پیچیدگی

کوکو ہیشنگ میں ، کسی عنصر کو داخل کرنا بدترین صورتحال میں O (1) سے کہیں زیادہ بدتر معلوم ہوتا ہے کیونکہ تصادم کے دوران بہت سے واقعات ہوسکتے ہیں ، جہاں ہمیں موجودہ قدر کی گنجائش بنانے کے ل a کسی قدر کو ہٹانا پڑتا ہے۔ اس کے علاوہ ، اگر کوئی سائیکل ہے تو پھر پوری ٹیبل کو دوبارہ سربلند کرنا چاہئے۔

دونوں فلٹرز کا وقتی تجزیہ کرنے سے مندرجہ ذیل نتائج برآمد ہوتے ہیں:

اس پورے تجربے میں (میرے کوڈ کو مدنظر رکھتے ہوئے پوری طرح سے اصلاح نہیں کیا جاسکتا ہے) ، بلوم فلٹرز خلا کی پیچیدگی میں غیر معمولی کارکردگی کا مظاہرہ کرتے دکھائی دیتے ہیں ، جس میں بڑی تعداد میں اشیاء کے لئے کم جگہ پر قبضہ ہوتا ہے۔ بظاہر بڑی تعداد میں اشیاء کو داخل کرنے پر کوکو فلٹر بہتر کارکردگی دکھاتا ہے ، لیکن اس کے نفاذ کی وجہ سے تلاش (اوقات کے وقت) میں قدرے آہستہ ہے۔

ارادہ

میں واقعی میں اس طرف نہیں جاؤں گا جس کے لئے فلٹر تجویز کرے ، میرے خیال میں ان دونوں کے اپنے استعمال کے معاملات ہیں۔ بلوم فلٹرز حذف کرنے کی حمایت نہیں کرتے ہیں کیوں کہ ہیشنگ نقصان دہ اور ناقابل واپسی ہے۔ اگرچہ گننے کے بلوم فلٹرز اس مسئلے کو حل کرتے ہیں ، کوکو فلٹرز اس صورت میں مفید ہیں جہاں آپ کو حذف کرنے کی ضرورت ہوگی۔ فلٹر مکمل ہونے پر کوکو فلٹر غلطی پیش کرتے ہیں ، اور اس کے اپنے فوائد ہیں ، جبکہ بلوم فلٹر میں ، صلاحیت پر کوئی قابو نہیں ہے ، یہ صرف موجودہ بٹ صف پر ہی زور دیتا ہے۔

کوڈ

حوالہ جات

  • https://brilliant.org/wiki/cuckoo-filter/
  • https://www.cs.cmu.edu/~dga/papers/cuckoo-conext2014.pdf
  • https://en.wikedia.org/wiki/Cuckoo_hashing
  • https://blog.fastforwardlabs.com/2016/11/23/probabilistic-data-struct-showdown-cuckoo.html

P.S اگر آپ کو جانچ / عمل میں کوئی خرابی محسوس ہوتی ہے تو ، براہ کرم بلا جھجھک اپنی تجویز / تبصرے چھوڑ دیں۔