Predis: MGET فوق مجموعة (تجزئة جانب العميل)

تم إنشاؤها على ١٢ فبراير ٢٠١٤  ·  4تعليقات  ·  مصدر: predis/predis

هل هناك أي خطط لدعم استرداد مفاتيح متعددة على التجزئة من جانب العميل؟ الآن يتم طرح استثناء عندما أحاول القيام بذلك. أم أن هناك واجهة برمجة تطبيقات أخرى يمكنني استخدامها لهذا الغرض؟

التعليق الأكثر فائدة

ألم يتمكن العميل من أخذ التجزئات لجميع المفاتيح ، والتحقق من العقد التي تنتمي إليها ثم إطلاق أجهزة متعددة لكل عقدة؟

ال 4 كومينتر

أوامر أداء عدة عمليات مفاتيح (مثل MGET ) لا يمكن أن تكون معتمدة عند استخدام مجموعة من رديس الليمفاوية لأنها أوامر من المفترض أن تعمل بالذرة على عقدة واحدة في حين قد توجد مفاتيح على العقد مختلفة (على سبيل المثال مع العميل يُنتج التجزئة ، key:1 و key:2 الأرجح تجزئتين مختلفتين مما يعني أنهما مخزنان على عقدتين مختلفتين). هناك استثناء واحد لهذه القاعدة (مُلزم جدًا من قبل العميل) عندما يُنشئ مفتاحان أو أكثر في الأمر نفس التجزئة بمعنى أنهما يتم تخزينهما على نفس عقدة المجموعة. هذا الشرط ممكن بشكل حاسم فقط عند استخدام علامات تجزئة المفتاح بتضمين جزء من المفتاح داخل {...} (ابحث عن _ key hash tags_ في هذا المستند للحصول على وصف كامل). على سبيل المثال ، ينتج عن {key}:1 و {key}:2 نفس التجزئة لأن الجزء الموجود داخل {...} يستخدمه العميل فقط لحساب التقسيم ، لذلك سيسمح Predis بأمر مثل MGET سيتم تنفيذ

ومع ذلك ، يمكنك محاولة توجيه أوامر متعددة GET لجلب المفاتيح من العقد المختلفة لأن Predis يدعم خطوط الأنابيب عبر التوصيلات الإجمالية. الأمر مختلف تمامًا نظرًا لأنه لن يكون لديك ذرية (ولا حتى عند طلب مفاتيح على نفس العقدة) ولكن على الأقل يمكنك تسريع الأمور باستخدام العديد من المفاتيح عن طريق تقليل أوقات ذهاب وعودة الشبكة.

ألم يتمكن العميل من أخذ التجزئات لجميع المفاتيح ، والتحقق من العقد التي تنتمي إليها ثم إطلاق أجهزة متعددة لكل عقدة؟

يبدو أنه يجب أن يكون ممكنًا ، تم الإبلاغ عنه في # 520

يمكن حل هذا باستخدام هذه المعلومات من https://redis.io/topics/cluster-spec#keys -hash-tags

هناك استثناء لحساب فتحة التجزئة المستخدمة من أجل تنفيذ علامات التجزئة. علامات التجزئة هي طريقة للتأكد من تخصيص مفاتيح متعددة في نفس فتحة التجزئة. يستخدم هذا من أجل تنفيذ عمليات متعددة المفاتيح في Redis Cluster.

من أجل تنفيذ علامات التجزئة ، يتم حساب فتحة التجزئة الخاصة بالمفتاح بطريقة مختلفة قليلاً في ظروف معينة. إذا كان المفتاح يحتوي على نمط "{...}" يتم تجزئة السلسلة الفرعية بين {و} فقط من أجل الحصول على فتحة التجزئة. ومع ذلك ، بما أنه من الممكن أن يكون هناك تكرارات متعددة {أو} ، فإن الخوارزمية محددة جيدًا بالقواعد التالية:

إذا كان المفتاح يحتوي على {حرف.
وإذا كان هناك حرف} على يمين {
و في حالة وجود حرف واحد أو أكثر بين أول موضع ورود لـ {وأول موضع ورود لـ}.
بعد ذلك ، بدلاً من تجزئة المفتاح ، يتم تجزئة ما بين التكرار الأول لـ {وأول تكرار لـ} فقط.

أمثلة:

سيتم تجزئة المفتاحين {user1000}. بعد و {user1000}. المتابعون إلى نفس فتحة التجزئة حيث سيتم تجزئة السلسلة الفرعية user1000 فقط من أجل حساب فتحة التجزئة.
بالنسبة إلى المفتاح foo {} {bar} ، ستتم تجزئة المفتاح بالكامل كما هو معتاد منذ التكرار الأول لـ {متبوعًا بـ} على اليمين بدون أحرف في المنتصف.
بالنسبة إلى foo الرئيسي {{bar}} ، انطلق السلسلة الفرعية {bar ستتم تجزئتها ، لأنها السلسلة الفرعية بين التواجد الأول لـ {وأول تواجد لـ} على يمينها.
بالنسبة إلى المفتاح foo {bar} {zap} ، ستتم تجزئة شريط السلسلة الفرعية ، نظرًا لأن الخوارزمية تتوقف عند أول تطابق صالح أو غير صالح (بدون بايت بالداخل) لـ {and}.
ما يلي من الخوارزمية هو أنه إذا بدأ المفتاح بـ {} ، فمن المضمون أن يتم تجزئته ككل. هذا مفيد عند استخدام البيانات الثنائية كأسماء مفاتيح.

المحلول:

تحتاج إلى توفير معرّف فريد لمجموعة المفاتيح داخل {} . سيتم نسخ البيانات على أي حال عبر العقد.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

m157y picture m157y  ·  14تعليقات

iyaozhen picture iyaozhen  ·  7تعليقات

stephenlb picture stephenlb  ·  6تعليقات

eventbase-web picture eventbase-web  ·  5تعليقات

dingchaolu picture dingchaolu  ·  7تعليقات