كيفية إنشاء نسخة من جدول في HBase على نفس المجموعة؟ أو كيفية تقديم الطلبات باستخدام الحالة الأصلية أثناء العمل على حالة عمل

StackOverflow https://stackoverflow.com/questions/3504626

سؤال

هل هناك طريقة فعالة لإنشاء نسخة من بنية الجدول+بيانات في HBase ، في نفس المجموعة؟ من الواضح أن جدول الوجهة سيكون له اسم مختلف. ما وجدته حتى الآن:

  1. وظيفة النسخ ، التي تم وصفها كأداة لنسخ البيانات بين مختلف مجموعات HBase. أعتقد أنه سيدعم التشغيل داخل الكتلة ، ولكن ليس لدي أي معرفة بشأن ما إذا كان قد تم تصميمه للتعامل مع هذا السيناريو بكفاءة.

  2. استخدم وظائف التصدير+الاستيراد. يبدو أن القيام بذلك بمثابة اختراق ، لكن بما أنني جديد على HBase ربما قد يكون هذا حلًا حقيقيًا؟

قد يسأل البعض منكم عن سبب محاولتي القيام بذلك. السيناريو الخاص بي هو أن لدي الملايين من الأشياء التي أحتاج إلى الوصول إليها ، في حالة "لقطة" إذا صح التعبير. هناك عملية دفعة تعمل يوميًا تقوم بتحديث العديد من هذه الكائنات. في حالة فشل أي خطوة في عملية الدُفعة هذه ، يجب أن أكون قادرًا على "التراجع" إلى الحالة الأصلية. ليس ذلك فحسب ، أثناء عملية الدُفعات ، أحتاج إلى أن أكون قادرًا على تقديم طلبات إلى الحالة الأصلية.

لذلك فإن التدفق الحالي هو أنني أقوم بتكرار الجدول الأصلي على نسخة عمل ، وتابع طلب الطلبات باستخدام الجدول الأصلي أثناء تحديث نسخة العمل. إذا اكتملت عملية الدُفعات بنجاح ، فأنا أبلغ جميع خدماتي لاستخدام الجدول الجديد ، وإلا فأنا أتجاهل الجدول الجديد.

لقد نجح هذا بشكل جيد في استخدام BDB ، لكنني في عالم جديد تمامًا من البيانات الكبيرة حقًا ، لذلك قد أتبع النهج الخاطئ. إذا كان لدى أي شخص أي اقتراحات عن الأنماط التي يجب أن أستخدمها بدلاً من ذلك ، فهي أكثر من موضع ترحيب. :-)

هل كانت مفيدة؟

المحلول

جميع البيانات في HBase لديها طابع زمني معين. يمكنك القيام بقراءات (GETS والمسح) مع معلمة تشير إلى أنك تريد أحدث إصدار من البيانات اعتبارًا من طابع زمني معين. هناك شيء واحد يمكنك القيام به هو القيام بقراءاتك لخادم طلباتك باستخدام هذه المعلمة تشير إلى وقت قبل بدء عملية الدُفعات. بمجرد الانتهاء من الدفعة ، اصطدم الطابع الزمني للقراءة حتى الحالة الحالية.

هناك شيئان لتوخي الحذر ، إذا اتخذت هذا النهج:

  • تم تكوين جداول HBase لتخزين أحدث إصدارات N من خلية معينة. إذا قمت بكتابة البيانات الموجودة في الخلية بقيم أحدث ، فستفقد القيمة القديمة أثناء الضغط التالي. (يمكنك أيضًا تكوينها باستخدام TTL لإنهاء صلاحية الخلايا ، لكن هذا لا يبدو وكأنه يطابق حالتك).
  • وبالمثل ، إذا قمت بحذف البيانات كجزء من عمليتك ، فلن تتمكن من قراءتها بعد الضغط التالي.

لذا ، إذا لم تصدر حذفًا كجزء من عملية الدُفعات الخاصة بك ، ولم تكتب المزيد من الإصدارات من نفس البيانات الموجودة بالفعل في جدولك أكثر من تكوينها للحفظ ، يمكنك الاستمرار في تقديم الطلبات القديمة من نفس الجدول الذي تقوم بتحديثه. هذا يعطيك بفعالية لقطة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top