خيارات استراتيجية ضغط كاساندرا
الحصول على فيا أب ستور قراءة هذه المشاركة في التطبيق لدينا!
كيف يمكن التحقق من أن استراتيجية الضغط تتغير في كاساندرا؟
أنا تغيير استراتيجية الضغط من حجم إلى مستوى؟ هل هناك أي طريقة للتحقق مما إذا كان الضغط قد تغير أم لا ؟؟
يمكنك العثور على معلومات الضغط باستخدام طلب البحث:
للحصول على نسخة كاساندرا & لوت؛ 3.
للحصول على نسخة كاساندرا> = 3.
تسجيل الدخول إلى كلش وتحقق هيكل الجدول.
سترى فئة ضغط الجدول:
يمكنك أيضا التحقق من حالة الضغط عبر نوديتول:
لمزيد من التفاصيل تحقق من هذه الروابط: نوديتول كومباكتيونستاتس.
ديت-تيريد، ضغط، إلى داخل، أباتشي، كاساندرا.
لأطروحة الماجستير، وأنا وضعت وقياس استراتيجية أباتشي كاساندرا الضغط الأمثل لسلسلة زمنية. وقد أدرجت في الآونة الأخيرة، استراتيجية ضغط التاريخ المتسلسل (دتس)، في كاساندرا المنبع. نحن الآن استخدامه في الإنتاج في سبوتيفي.
وقد كتب ماركوس إريكسون مشاركة مدونة أخرى حول هذه الميزة على مدونة مطوري داتاستاكس.
ما هي استراتيجية الضغط؟
وتسمى ملفات البيانات التي يتم تخزينها على عقد القرص كاساندرا على القرص سلسلة سلاسل فرز (ستابلز). وهي في الأساس صفيفات مرتبة من البيانات. ويكمن الأداء المتميز لشركة كاساندرا في تخزينها المنظم، فإنه يعترف فقط كم مقارنة أكثر تكلفة عشوائية تسعى إلى عمليات متتابعة على الأجهزة الحديثة. منح هذا الفرق أكبر على محركات الأقراص الثابتة من محركات الأقراص الصلبة. ومع ذلك، فإن حفظ البيانات من التجزؤ له أهمية أساسية بالنسبة لأداء كاساندرا العام.
قد يبدو مصفوفة فرز مثل بنية البيانات البدائية، لكنه يسمح البحث عن مجموعة واحدة الاستعلامات. منذ كاساندرا ليست مهتمة في الكتابة الصغيرة إلى القرص، والتكلفة الرهيبة من الإدراج في صفائف فرزها لا خسارة. كاساندرا لن تفعل تلك على أي حال. وبصرف النظر عن سجل الالتزام الذي يحسن ضد القرص يسعى بطرق تقع خارج نطاق هذا المنصب، النوع الوحيد من الكتابة إلى القرص الذي كاساندرا يفعل هو كتابة متتابعة كبيرة من البيانات: إغراق مذكرات في الذاكرة في شكل من ستابل جديدة. حيث أن معظم يكتب فقط ذاكرة اللمس، وتحديث ميمتابل (أو، اعتبارا من 2.0، قائمة تخطي) يجعل التكلفة المطفأة لطلب الكتابة منخفضة جدا. فقط عندما ميمتابل كبيرة بما فيه الكفاية، هو ملقاة على القرص.
لطلب القراءة على عقدة كاساندرا، قصة الأداء ليست بهذه البساطة. ويرتبط الأداء بقوة إلى عدد من القرص يسعى اللازمة للعثور على القيمة الصحيحة. المفتاح الأساسي الذي يتم تخزين القيم به يتكون من:
مفتاح التقسيم، الذي يحدد بيانات العقدة المخزنة على. يتم تجزئة مفاتيح التقسيم. واحد أو أكثر من مفاتيح التجميع التي تحدد التكتل. يتم فرز ستابلز استنادا إلى مفاتيح التجميع.
كاساندرا مخازن لكل ستابل الفهارس في الذاكرة، لذلك ليس هناك حاجة لإجراء بحث ثنائي على القرص الفعلي للعثور على المكان الصحيح في ستابل. بدلا من ذلك، المشكلة هي العثور على ستابل الصحيح. تذكر أن ستابلز جديدة يتم إلقاء دوريا إلى القرص؛ في نهاية المطاف سيتم كتابة الآلاف من ستابلز.
كيف كاساندرا تجنب أداء الآلاف من القرص يسعى على كل طلب القراءة؟ كاساندرا لديها طرق لتصفية بعض بعيدا. هذه هي لكل ستابل، وتشمل:
مرشحات بلوم، والتي يمكن أن أقول عندما يكون مفتاح التقسيم ليست في ستابل. الحد الأدنى & أمب؛ مفاتيح التجميع القصوى، والتي يمكن أن تساعد في استبعاد عدد من ستابلز. الحد الأدنى & أمب؛ والحد الأقصى للطوابع الزمنية، والذي يتيح كاساندرا سبب ما إذا كان التحديثات أو حذف القيم يمكن أن تأتي بعد كتابة قيمة معينة. (هاشد) نطاقات مفتاح التقسيم، والتي في حالة استخدام استراتيجية ضغط المستوى، يقلل بشكل كبير من عدد ستابلز المحتملة للنظر في.
ولكن هذه التحسينات لا تساعد كثيرا إذا تم ترك هذه ستابلز فقط لم يمسها. التحسين الذي يفعل شيئا حيال ذلك هو الضغط. و ستابلز غير قابل للتغيير، ولكن يمكن ضغطها، أي اندمجت في ستابلز أكبر والتي عند الانتهاء يتيح ستابلز الأصلي تكون القمامة التي تم جمعها. هذا، بطبيعة الحال، هو عملية قرص متتابعة أخرى. وباختصار، يخدم الضغط هذه الأغراض:
يضمن أن كاساندرا أن ننظر في عدد قليل من ستابلز ممكن على طلب القراءة، بعد تطبيق قائمة التحسينات المذكورة أعلاه. يضع نطاقات من مفاتيح التجميع المتلاصقة متجمعة على القرص، بحيث مجموعة معينة من مفاتيح التجميع داخل قسم واحد تكمن في عدد قليل من الملفات قدر الإمكان. يثبت شواهد القبور و تل انتهت البيانات. الشاهد هو "حذف منطقي". كتابة مع خاص "حذف هذه" قيمة.
التي ستابلز لاختيار ومتى ضغط.
حتى الإصدار 2.0.10 و 2.1.0، كاساندرا شحنها مع اثنين من استراتيجيات الضغط: سيز-تيرد ضغط استراتيجية (ستسس) واستراتيجية ضغط المستوى (لس). هذه الاستراتيجيات لاختيار ما للتعاقد ومتى وكيف تكون مختلفة في النهج كما يمكن للمرء أن يتصور. قبل التحدث عنهم، شيء واحد جدير بالملاحظة هو أن عملية الضغط ليست على الإطلاق مجانا. يستغرق وقتا ومساحة يتناسب مع الحجم المشترك من ستابلز المشاركة. وبينما يمكن تشغيل العديد من المعاملات بشكل مواز، تصبح الطلبات الواردة أبطأ من عدد المعاملات التي يتم تشغيلها.
ستكس له هدف واحد بسيط: جعله لذلك هناك عدد قليل من ستابلز على القرص ممكن في أي وقت من الأوقات. فإنه يفعل ذلك بطريقة مثاليا بشكل متكافئ أن يضغط فقط ستابلز التي هي قريبة بما فيه الكفاية في الحجم. في المتوسط وفي أسوأ الأحوال، عدد ستابلز على القرص هو لوغاريتمي إلى إجمالي حجم البيانات على القرص.
يأخذ لس نهجا مختلفا جذريا. فإنه ليس فقط دمج ستابلز، لكنه أيضا ينقسم لهم لجعل فقط مجموعة معينة من مفاتيح التقسيم يعيش في ستابل واحد. ومن ثم يحافظ على هذه النطاقات بعيدا بطريقة ذكية وهذا يعني يمكن أن يوجد مفتاح قسم فقط في عدد قليل من الملفات، لوغاريتمي إلى إجمالي حجم البيانات على القرص. بالمقارنة مع ستكس، فإنه يميل إلى أن يؤدي إلى عدد أقل يسعى لكل طلب القراءة، ولكن يؤدي عدد أكبر من المعاملات مع عدد أكبر من ستابلز المشاركة في كل عملية.
السلاسل الزمنية.
واحدة من الحالات الاستخدام الأكثر شيوعا كاساندرا هو لسلسلة زمنية. سلسلة زمنية في كاساندرا يستخدم وقت نقطة البيانات كمفتاح التجميع. هذا النوع من حالات الاستخدام له عدد من الخصائص المفيدة التي لا يستفيد منها أي من استراتيجيات الضغط المذكورة آنفا من:
تجميع المفتاح والطابع الزمني (كاساندرا وقت الكتابة) ترتبط مباشرة. تميل البيانات إلى إرسالها إلى كاساندرا في الوقت المناسب. الكتابة خارج النظام يكتب فقط على نطاق صغير (في بضع ثوان، عادة). الأنواع الوحيدة للحذف المستخدمة هي بواسطة تل أو الأقسام بالكامل في وقت واحد. معدل كتابة البيانات ثابت تقريبا.
الاستعلام عن سلسلة زمنية عادة ما يكون استعلام شريحة (استعلام نطاق) على قسم معين. ربما، الاستعلام الأكثر شيوعا هو شيء مثل "القيم من آخر ساعة / يوم / أسبوع".
منذ كاساندرا يحمل البيانات التعريفية في الذاكرة حول الحد الأقصى والحد الأدنى مفاتيح التجميع لكل ستابل، استعلامات النطاق يمكن أن تستبعد فورا ستابلز التي لها نطاق يقع خارج نطاق الاستعلام. ولكن ستكس و لس لا تولي اهتماما لهذا. والنتيجة بعد تشغيل استراتيجية الضغط من مستويات الحجم على سلسلة زمنية هو أن جميع ستابلز تقريبا بعض البيانات القديمة وبعض البيانات الجديدة فيها. حتى لو كانت قيمة واحدة فقط أقدم بكثير أو أحدث من بقية، وهذا يغير الحد الأدنى / الحد الأقصى للطابع الزمني، ونتيجة لذلك يرى كاساندرا أن ستابل يغطي مجموعة أكبر بكثير من مفاتيح التجميع. وفيما يلي رسم بياني يوضح مثالا على تشغيل الكتابة باستمرار إلى سلسلة زمنية جديدة مع ستكس:
المحور الأفقي في هذا المخطط يمثل الطوابع الزمنية من بداية المثال تشغيل على اليسار إلى النهاية على اليمين. تم السماح للتعليقات قبل الانتهاء من إنشاء هذه الصورة. كل مستطيل هو ستابل (ما مجموعه 11 في هذه الحالة). الحافة اليسرى من كل مستطيل يمثل الحد الأدنى من الطابع الزمني، والحافة اليمنى علامات الطابع الزمني الأقصى. في حين أن المحور الرأسي لا يحمل أي أهمية، تمثل مساحة كل مستطيل حجم ملف البيانات. يمثل الشريط العمودي استعلام شريحة. يسأل هذا الاستعلام عن جميع نقاط البيانات، في قسم معين، في غضون فترة زمنية معينة.
في هذا المثال، أجزاء من كل ستابلز 11 تحتاج إلى قراءة، مما يؤدي إلى 11 القرص يسعى. ما نراه هنا هو ستابلز حجم مختلف تغطي أكثر أو أقل مجموعة كاملة من مفاتيح التجميع. حجم وعمر اتباع أي نمط.
الضغط المتدرج.
قبل الدخول في تفاصيل الاستراتيجية الجديدة للضغط على مستويات التاريخ (دتس)، مع وضع الصورة السابقة في الاعتبار، دعونا نرى ما تنتج دتس في نفس السيناريو:
في هذه الصورة، يمكنك ان ترى 20 ستابلز التي تنتشر أكثر بكثير بشكل جيد على الجدول الزمني. عدد ستابلز أعلى، ولكن هذا هو في معظمه بسبب إعداد base_time_seconds منخفضة. يحدد هذا الإعداد كم عمر ستابل يجب أن لا تدخل فورا الضغط. الاستعلام شريحة الآن يضرب فقط 3 ستابلز، وهو أمر عظيم، بالنظر إلى حجم شريحة في هذا المثال يغطي 20٪ من السطر الزمني. لاحظ أيضا أن جميع المستطيلات لها نفس الارتفاع تقريبا. وهذا يدل على العلاقة بين حجم وعمر دتس-ستستابلز المدمجة في مجموعة البيانات حيث يتم الكتابة في وتيرة ثابتة. و ستابلز ليست فقط تاريخ المتدرج، فهي حجم المتدرج جدا!
يمكنك أن ترى على الفور كيف معظم الاستفسارات تتطلب كاساندرا للنظر في كل ستابل في حالة ستكس. في المثال ستكس أعلاه، ومجال فعال نوعا ما فقط للاستعلام هو الحق في بداية الفترة الزمنية، وعادة أقل قسم مهم. في حالة دتس، ستستابلز تكمن في تسلسل، وبعض فقط من ستابلز يجب أن تكون لمست في الاستعلامات شريحة. في الاستعلام مفتاح واحد أو الاستعلام شريحة ضيقة، في معظم الوقت فقط ستابل واحد يجب أن يكون لمست. لا يزال الاستعلام "ساعة الماضية" أقل كفاءة من استعلام لساعة سابقة، ولكن دتس يفعل أفضل ما يمكن، نظرا لتدفق مستمر من ستابلز. في الممارسة العملية، ستستابلز أحدث من المرجح أن يكون القرص المخزنة مؤقتا.
متى تستخدم دتس (ومتى لتجنب ذلك)
ومن الواضح أن دتس كبيرة في التعامل مع سلسلة زمنية. هذا ما تم تصميمه ل. كما هو مبين هنا، دتس أيضا التحديات ستكس على أي مجموعة البيانات التي يحصل يكتب بمعدل ثابت. وهذا يمثل نسبة عالية من حالات استخدام كاساندرا. دتس ليست حساسية لنمط الكتابة أكثر متفرقة إما. ولكن الشيء الذي يعمل ضد جهود الاستراتيجية هو يكتب مع الطابع الزمني للغاية خارج النظام. إذا كان ستابل يحتوي على الطوابع الزمنية التي لا تتطابق مع الوقت عندما كان مكتوبا بالفعل إلى القرص، فإنه ينتهك المراسلات من حجم إلى سن أن دتس يحاول الحفاظ عليها. هذه ستابلز لا تظهر عضويا في كاساندرا نتيجة الإصلاحات. المشكلة هي أن ستابلز الصغيرة في نهاية المطاف في ويندوز مخصص ل ستابلز كبيرة، ودمج الملفات الكبيرة مع الملفات الصغيرة غير فعالة. النظر في إيقاف إصلاحات القراءة. إصلاحات مكافحة الإنتروبي وملحوظة هاندوف لا تكبد الكثير من العمل الإضافي ل دتس ويمكن استخدامها مثل المعتاد.
أيضا، تأكد من أن جميع الكتابة تستخدم نفس شكل الطابع الزمني. سواء كان ذلك ميكروثانية أو ميلي ثانية، فإن مزيج تتصرف كما خارج للغاية من النظام. كما هو الحال دائما، تأكد من مزامنة الساعات العميل. انها العملاء، وليس الخوادم التي تحدد الطوابع الزمنية. حتى فكرة دتس من "الوقت الحالي" تحكمها الطوابع العميل.
كبيرة في إزالة البيانات.
تخزين كاساندرا سجل منظم لديه صعوبة في التعامل مع الحذف. يتم استخدام شواهد القبور لتمثيل حذف أو انتهت مدة البقاء. كاساندرا يدير لحذف القيم المرتبطة خلال المعاملات بمعدل جيد. ولكن استراتيجيات الضغط الموجودة لديها صعوبة في حذف شواهد القبور أنفسهم، والتي يمكن أن تصبح في الواقع مشكلة. دتس يساعد كثيرا في تطهير شواهد القبور، لأنه عندما تصل إلى ستابل أقدم، كاساندرا ببساطة يزيل أي علامة القبر التي هي أقدم من فترة سماح غ. و ستابل الذي هو أقدم من جميع الآخرين ليس لديهم سبب لعقد شواهد القبور بعد فترة السماح.
وهذا مفيد بشكل خاص لجميع مجموعات البيانات تل، حيث كاساندرا حتى قادرة على حذف ستابلز كامل بمجرد انتهاء صلاحيتها بالكامل. دتس يساعد على الحفاظ على البيانات الجديدة والقديمة منفصلة، بحيث التحسين يمكن ركلة في أكثر من ذلك بكثير. وهذا يعني أنه يمكن الوثوق في مجموعة بيانات كل-تل مع دتس للبقاء ثابتة في الحجم على المدى الطويل وبطريقة فعالة.
تلك العقارات الواقعة.
لاستخدام دتس، يحدد المستخدم استراتيجية الضغط كما داتيتيردكومباكتيونستراتيغي، الذي يرافقه عدد من الخصائص الفرعية. الخيارات مع أكبر تأثير على كيفية تصرف دتس هي (هذه الخصائص والقيم الافتراضية عرضة للتغيير):
timestamp_resolution (ديفولت = "ميكروسيكوندس"): تأكد من تعيين هذا على نفس التنسيق الذي يستخدمه العملاء عند كتابة الطوابع الزمنية (يستخدم سكل ميكروثانية افتراضيا). base_time_seconds (الافتراضي = 3600 (ساعة واحدة)): هذا يحدد حجم الإطار الأولي الذي يملي كم من معظم البيانات المكتوبة حديثا يجب أن تكون مضغوطة بفارغ الصبر معا. جميع البيانات الأقدم من base_time_seconds سيتم تجميعها مع بيانات أخرى عن نفس العمر، وعندها تبدأ المزيد من التفاعلات تحدث بشكل متزايد (أضعافا مضاعفة) بشكل أقل تواترا. هذا الخيار مشابه ل سوببروتي min_ststable_size في سيزتيريدكومباكتيونستراتيغي. min_threshold (افتراضي = 4): بالنسبة للبيانات التي لا تظهر في النافذة الحالية لأحدث البيانات، فإن min_threshold تسمح بعدد من هذه النوافذ التي تم ضغطها سابقا بنفس الحجم (الفترة الزمنية) يجب أن يتم إنشاؤها قبل دمجها في نافذة زمنية واحدة min_threshold كبيرة. نوافذ من نفس الحجم هي بالطبع متاخمة لبعضها البعض، وهناك أبدا أكثر من نوافذ الحد الأدنى من حجم واحد (ما لم min_threshold = 1، بطبيعة الحال). max_sstable_age_days (افتراضي = 365): ستوب كومباكتينغ ستابلز التي تحتوي على بيانات أقدم من هذا العدد من الأيام. يؤدي تحديد هذا الانخفاض إلى تقليل العدد الإجمالي للمرات التي يتم فيها إعادة كتابة القيمة نفسها إلى القرص. لأنه يمنع ضغط أكبر ستابلز، ويمكن أيضا أن تستخدم للحد من مقدار مساحة القرص الحرة اللازمة للضغط.
كيف يعمل دتس.
والفكرة هي أن تعمل على غرار ستكس، ولكن بدلا من ضغط على أساس حجم ستابل، والتعاقد على أساس سن ستابل. قياس العمر المستخدم هو الحد الأدنى من الطابع الزمني لل ستابل، مطروح من الطابع الزمني الأقصى على الصعيد العالمي. على افتراض أن الكتابة تأتي بمعدل ثابت إلى حد ما، وأن الطوابع الزمنية تعكس تقريبا وقت الوصول إلى كاساندرا (اثنين من الخصائص التي تقام لأكثر بكثير من مجرد سلسلة زمنية)، وحجم ستابل هو الحد الأقصى من قبل عصرها. وعلاوة على ذلك، إذا تم دمج ستابلز دائما مع ستابلز القديمة مماثلة، القديمة منها ستكون كبيرة وسوف تكون جديدة صغيرة. وبعبارة أخرى، في حين أن دتس تتراكم على أساس العمر، وهذا الارتباط بين العمر والحجم يعني أنه يحصل على نفس خصائص الأداء المتقلب كما ستكس، مع الحفاظ على البيانات المجمعة حسب الطوابع الزمنية، كما هو موضح في الرسم البياني أعلاه.
طريقة واحدة لتنفيذ هذا سيكون لمحاكاة تماما سلوك ستس و ستابلز المدمجة مع فارق السن النسبي أقل من عامل ثابت. ولكن هناك خاصية هامة واحدة تختلف بين حجم وسن ستابل: حجم ثابت، ولكن يرتفع العمر مع مرور الوقت. حتى ستابلز التي لم يكن لها أعمار داخل هذا العامل الثابت قبل لحظة قد يكون فجأة. وهذه مضاعفة نرغب في تجنبها. كما يصبح من الصعب التفكير في كفاءة هذا النهج.
النهج الذي تم اختياره، بدلا من ذلك يستخدم الوقت الحالي لحساب نوافذ الوقت بين عصر يونكس والآن. هذه النوافذ لا تنزلق مع مرور الوقت. بدلا من ذلك، مع مرور الوقت، تظهر نوافذ جديدة وتدمج القديمة في نوافذ أكبر. يتم تحديد الوقت الذي يحتاج إلى تمرير قبل إنشاء إطار وقت جديد بواسطة سوببروتي base_time_seconds. عدد النوافذ من حجم واحد التي تحتاج إلى أن تتراكم قبل دمجها في أكبر واحد يتم تحديده من قبل سوبربيرتي الحد الأدنى. على سبيل المثال، مع base_time_seconds = 3600 (ساعة) و min_threshold = 4، قد يبدو موضع آخر نوافذ زمنية قليلة في 7 ساعات متتالية كما يلي:
الشرط للضغط بسيط: إذا كان ستابلز متعددة لها عمر الذي يقع في نفس النافذة، سوف دتس ترشيح كل تلك للضغط. النقطة الحالية في الوقت (يحسب كطابع زمني أقصى على الصعيد العالمي عبر ستابلز) يقع دائما في أحدث نافذة الوقت.
التعريف الدقيق لوقت اندماج نوافذ الوقت هو: لحظة الحصول على نوافذ الحد الأدنى من حجم واحد مصحوبة نافذة أخرى بنفس الحجم، مجموعة من النوافذ المذكورة أعلاه دمج في واحد. وهذا يمكن أن يكون لها تأثير الدومينو كما رأينا في حارة أسفل الصورة، حيث أثارت نافذة الخامسة 1 ساعة إنشاء نافذة 4 ساعات الخامسة، مما اثار خلق نافذة 16 ساعة.
وللحفاظ على تجميع البيانات استنادا إلى وقت الكتابة، تستخدم إستراتيجية الضغط من طبقات التاريخ المعلومات التي تتجاهلها الاستراتيجيات الأخرى. أنها رخيصة جدا للحفاظ على هذا الهيكل طالما نادرا ما يتم كتابة البيانات خارج النظام. هذا الفصل بين البيانات القديمة والجديدة ممتازة لسلسلة زمنية. كما أنه يحمل ميزة ضد الاستراتيجيات الأخرى في تطهير البيانات المحذوفة بسرعة ويمكن التنبؤ بها.
خيارات استراتيجية ضغط كاساندرا
سحب الطلبات 1.
حذف الضغط هو وسيلة لتحقيق الحذف في أباتشي كاساندرا دون اللجوء إلى شواهد القبور أو تلس. وهو يعمل من خلال وضع قواعد لما يجب حذف البيانات، ثم أثناء الضغط القياسية أو المعرفة من قبل المستخدم، ومنع السجلات التي تفشل الإدانة من دخول ستابل المدمجة حديثا. يتم تنظيف الفهارس الثانوية في وقت حدوث الحذف.
خيارات ضغط قاعدة دسس:
dcs_convictor - السلسلة المطلوبة - ما يسجله المدانون أثناء الضغط. يجب أن يكون اسم فئة صالحا يمتد أبستراكتسيمبليديليتينغكونفيكتور dcs_underlying_compactor - سلسلة المطلوبة - استراتيجية الضغط الأساسية لاستخدامها لاختيار ستست dcs_is_dry_run - اختياري بولان - إذا كان صحيحا، لا يتم تنفيذ عمليات حذف بدلا من ذلك يتم تسجيل إحصائيات حول ما كان سيتم حذفها إلى سجلات كاساندرا dcs_status_report_ms - سيتم تقديم تقرير حالة عن التقدم المحرز في حذف الضغط في هذه الفاصل الزمني dcs_backup_dir - سلسلة اختيارية - في حالة تقديمها، سيتم كتابة السجلات المحذوفة أثناء الضغط إلى ملفات ستابل في هذا الدليل.
يتم تمرير جميع الخيارات الأخرى أولا إلى الدرجة كونفيكتور، ثم إلى استراتيجية الضغط الأساسية.
يمكن أن يكون للمتهمين دسس خياراتهم الخاصة. فمثلا:
delete_keys - سلسلة مطلوبة - قاموس سلسلة جسون يوفر قواعد الحذف في شكل، حيث يتم تعريف النطاقات إما بالقيمة المفردة أو صفيف ذات قيمة اثنين من الحدود العلوية والسفلية لتتناسب مع هذا العمود، حيث تشير قيمة فارغة إلى غير محدود حافة النطاق.
rule_select_statement - سلسلة مطلوبة - ككل سيليكت بيان لاسترداد قواعد وقت متأخر تل. يجب أن يعرض البيان الأعمدة التالية: عمود (نص) اسم النطاق (أي) (tuple2 & لوت؛ سترينغ، سترينغ & غ؛) تل (بيجينت)
بالنسبة إلى اسم معين، يجب أن تكون كافة الأعمدة في تلك القاعدة إما أقسام أو مجموعات نظام المجموعة، ومن أجل تطبيق القاعدة على الصف، يجب أن يتطابق كل عمود في القاعدة مع نطاق واحد على الأقل. إذا تطابقت قواعد متعددة مع صف، فسيتم تطبيق القاعدة التي تحتوي على أقل تل. يعني تل من 0 حذف على الفور، تل & لوت؛ 0 يعني عدم الحذف. تتم مقارنة ذرات وريتيتيم ضد تل فعالة، وإذا كانت الذرة أقدم من تل، الذرة لا البقاء على قيد الحياة الضغط.
بالنسبة للجدول الذي يتضمن حقل اسمه "المستأجر" في المفتاح الأساسي (إما القسم أو الكتلة)، يمكننا تطبيق وقت ضغط تل مثل هذا. لاحظ الأسطر الأخيرة حيث أننا التفاف سيزتيريدكومباكتيونستراتيغي - هذا يجب أن تعمل بنفس الطريقة مع أي استراتيجية الضغط الأخرى.
مع قواعد الحذف المصاحبة التي تبدو كما يلي:
لإنتاج جرة التي يمكن تحميلها في الكتلة كاساندرا الخاص بك:
هذا سيضع جرة في حذف-كومباكتيون-ستراتيغي / تارجيت / سكالا-2.10 / ديليتينغ-كومباكتيون-ستراتيغي-0.24-SNAPSHOT. jar. على الرغم من أن المسار الهدف يذكر سكالا، لا توجد تبعيات سكالا في هذا جرة، وفي الواقع لا توجد تبعيات التي ليست بالفعل جزءا من الأساسية كاساندرا.
&نسخ؛ 2017 جيثب، Inc. شروط الخصوصية تعليمات حالة الأمان.
لا يمكنك تنفيذ هذا الإجراء في الوقت الحالي.
لقد سجلت الدخول باستخدام علامة تبويب أو نافذة أخرى. أعد التحميل لتحديث الجلسة. لقد سجلت الخروج في علامة تبويب أو نافذة أخرى. أعد التحميل لتحديث الجلسة.
CompactionВ¶
أنواع الضغط¶¶
يتم استخدام مفهوم الضغط لأنواع مختلفة من العمليات في كاساندرا، والشيء المشترك حول هذه العمليات هو أنه يأخذ واحد أو أكثر ستابلز وإخراج ستابلز جديدة. أنواع التفاعلات هي؛
تم تشغيل ضغط طفيفة تلقائيا في كاساندرا. ضغط كبير مستخدم ينفذ ضغط على جميع ستابلز على العقدة. تعريف المستخدم الضغط يقوم المستخدم بتشغيل الضغط على مجموعة معينة من ستابلز. فرك محاولة لإصلاح أي اسطوانات مكسورة. هذا يمكن فعلا إزالة البيانات صالحة إذا كانت البيانات تالفة، إذا حدث ذلك سوف تحتاج إلى تشغيل إصلاح كامل على العقدة. ترقية أوبغرادستابلز ستابلز إلى أحدث إصدار. تشغيل هذا بعد الترقية إلى إصدار رئيسي جديد. تنظيف إزالة أي نطاقات هذه العقدة لا تملك بعد الآن، وعادة ما أثار على العقد المجاورة بعد عقدة تم بوتسترابد منذ تلك العقدة سوف تأخذ ملكية بعض النطاقات من تلك العقد. مؤشر ثانوي إعادة بناء إعادة الفهارس الثانوية على العقدة. أنتيكومباكتيون بعد إصلاح النطاقات التي تم إصلاحها فعلا يتم تقسيمها من ستابلز التي كانت موجودة عند بدء الإصلاح. ضغط النطاق الفرعي من الممكن فقط ضغط نطاق فرعي معين - قد يكون هذا مفيدا إذا كنت تعرف رمز مميز قد تم التصرف به بشكل خاطئ - إما تجميع العديد من التحديثات أو العديد من عمليات الحذف. (نوديتول كومباكت - st x - et y) ستختار كل ستستابلز التي تحتوي على المدى بين x و y وتصدر ضغطا لتلك الناقلات. ل ستكس هذا على الأرجح تشمل جميع ستابلز ولكن مع لس يمكن أن يصدر الضغط لمجموعة فرعية من ستابلز. مع لس سيستابل الناتجة ستنتهي في L0.
متى يتم تشغيل ضغط طفيف؟ В¶
# عندما يتم إضافة ستابل إلى العقدة من خلال بيغ / تدفق الخ # عندما يتم تمكين أوتوكومباكتيون بعد تعطيل (نوديتول إنفيلوتوتوكومباكتيون) # عندما يضيف الضغط ستابلز جديدة. # التحقق من وجود طفيفة جديدة كل 5 دقائق.
دمج ستابلز¶¶
الضغط هو حول دمج ستابلز، حيث يتم فرز الأقسام في ستابلز استنادا إلى التجزئة من مفتاح القسم من الممكن دمج ستابلز منفصلة بشكل فعال. يتم فرز محتوى كل قسم أيضا بحيث يمكن دمج كل قسم بكفاءة.
مجموعة القبور وجمع القمامة (غ) غريسك¶
لماذا تومبستونيسВ T
عند تلقي طلب حذف من قبل كاساندرا فإنه لا إزالة البيانات من المتجر الأساسي فعلا. بدلا من ذلك يكتب قطعة خاصة من البيانات المعروفة باسم قبر. ويمثل المقبرة الحذف ويسبب كل القيم التي حدثت قبل أن يظهر القبر في الاستعلامات إلى قاعدة البيانات. ويستخدم هذا النهج بدلا من إزالة القيم بسبب طبيعة توزيع كاساندرا.
الحذف بدون علامات القبور ¶
تخيل مجموعة عقدة ثلاثة لها قيمة [A] متماثلة إلى كل عقدة:
إذا فشل أحد العقد و عملية الحذف لدينا فقط إزالة القيم الموجودة يمكننا في نهاية المطاف مع الكتلة التي تبدو مثل:
ثم عملية إصلاح ستحل محل قيمة [A] مرة أخرى على العقدتين التي تفتقد القيمة:
ومن شأن ذلك أن يؤدي إلى إحياء بياناتنا حتى لو تم حذفها.
الحذف مع تومبستونيسВ T
تبدأ مرة أخرى مع ثلاثة عقدة العنقودية التي لها قيمة [A] نسخ متماثل إلى كل عقدة:
إذا بدلا من إزالة البيانات نضيف سجل علامة، فإن لدينا حالة واحدة عقدة الفشل تبدو مثل هذا:
الآن عندما نصدر إصلاح سيتم نسخ القبر إلى النسخة المتماثلة، بدلا من البيانات المحذوفة يجري إحياء:
سوف عملية إصلاح لدينا وضع بشكل صحيح حالة النظام إلى ما نتوقع مع سجل [A] ملحوظ كما حذف على جميع العقد. وهذا يعني أننا سوف ينتهي بنا تراكم القبور التي سوف تتراكم بشكل دائم مساحة القرص. لتجنب إبقاء شواهد القبور إلى الأبد لدينا معلمة تعرف باسم gc_grace_seconds لكل جدول في كاساندرا.
المعلمة gc_grace_seconds و تومبستون ريموفال¶¶
تتحكم المعلمة gc_grace_seconds على مستوى الجدول كم من الوقت ستحافظ كاساندرا على شواهد القبور من خلال أحداث الضغط قبل إزالتها نهائيا. يجب أن تعكس هذه المدة بشكل مباشر مقدار الوقت الذي يتوقع المستخدم السماح به قبل استرداد عقدة فاشلة. بعد انتهاء فترة gc_grace_seconds يمكن إزالة الشاهد (بمعنى أنه لن يكون هناك أي سجل يتم حذف جزء معين من البيانات)، ولكن كقبر يمكن أن يعيش في ستابل واحد والبيانات التي يغطيها في آخر، يجب أن تشمل أيضا الضغط على حد سواء ستابل لشاهد لإزالتها. على وجه التحديد، لتكون قادرة على إسقاط قبر الفعلي ما يلي يجب أن يكون صحيحا؛
يجب أن يكون القبر أقدم من gc_grace_seconds إذا كان القسم X يحتوي على القبر، يجب تضمين ستابل التي تحتوي على القسم بالإضافة إلى جميع ستابلز تحتوي على بيانات أقدم من القبر تحتوي على X في نفس الضغط. نحن لا نحتاج لرعاية إذا كان القسم في ستابل إذا كنا نستطيع أن نضمن أن جميع البيانات في هذا ستابل هو أحدث من القبر. إذا كان القبر أقدم من البيانات فإنه لا يمكن الظل أن البيانات. إذا تم تمكين الخيار only_purge_repaired_tombstones، تتم إزالة شواهد القبور فقط إذا تم إصلاح البيانات أيضا.
إذا ظلت العقدة أسفل أو قطع الاتصال لفترة أطول من gc_grace_seconds سيتم إصلاح البيانات المحذوفة مرة أخرى إلى العقد الأخرى وإعادة الظهور في الكتلة. هذا هو في الأساس نفسه كما في & # 8220؛ يحذف دون شواهد القبر & # 8221؛ الجزء. لاحظ أنه لن يتم إزالة شواهد القبور حتى حدث ضغط حتى إذا انقضى gc_grace_seconds.
القيمة الافتراضية ل gc_grace_seconds هي 864000 أي ما يعادل 10 أيام. يمكن تعيين هذا عند إنشاء جدول أو تغييره باستخدام gc_grace_seconds.
البيانات في كاساندرا يمكن أن يكون خاصية إضافية تسمى الوقت للعيش - وهذا يستخدم لإسقاط البيانات التي انتهت صلاحيتها تلقائيا بمجرد الوصول إلى الوقت. وبمجرد انتهاء مدة البقاء (تل)، يتم تحويل البيانات إلى علامة ضبابية والتي تبقى حول gc_grace_seconds على الأقل. لاحظ أنه إذا قمت بجمع البيانات مع تل والبيانات دون تل (أو طول مختلف فقط من تل) كاساندرا سيكون وقتا عصيبا إسقاط شواهد القبور التي أنشئت منذ القسم قد تمتد العديد من ستابلز وليس كلها يتم ضغط في وقت واحد.
ستابلز بالكامل
إذا كان ستابل يحتوي فقط على شواهد القبور ويضمن أن ستابل ليس الظل البيانات في أي ضغط ستابل أخرى يمكن إسقاط أن ستابل. إذا كنت ترى ستابلز مع فقط شواهد القبور (لاحظ أن تل: إد البيانات تعتبر شواهد القبور مرة واحدة في الوقت للعيش قد انتهت) ولكن لا يتم إسقاطها عن طريق الضغط، فمن المرجح أن ستستابلز أخرى تحتوي على البيانات القديمة. هناك أداة تسمى ستابيكسيردبلوكيرز التي سوف قائمة التي ستابلز هي سروبلابل والتي تمنعهم من إسقاط. هذا مفيد بشكل خاص للضغط سلسلة الوقت مع تيمويندوكومباكتيونستراتيغي (و ديتتيريدكومباكتيونستراتيغي إيقاف).
البيانات التي تم إصلاحها / غير المعالجة
مع الإصلاحات الإضافية كاساندرا يجب أن تتبع ما هي البيانات التي تم إصلاحها وما هي البيانات التي لم يتم إصلاحها. مع أنتيكومباكتيون إصلاح البيانات يتم تقسيمها إلى إصلاحها و ستريبليس أونريبايرد. لتجنب خلط البيانات مرة أخرى يتم تشغيل مثيلات استراتيجية الضغط منفصلة على مجموعتين من البيانات، كل حالة فقط معرفة سوى إصلاحات أو ستريبليس غير إصلاحها. وهذا يعني أنه إذا قمت بتشغيل إصلاح متزايد مرة واحدة ثم مرة أخرى أبدا، قد يكون لديك بيانات قديمة جدا في ستابلز إصلاحها التي تمنع الضغط من إسقاط شواهد القبور في ستريبليس (غير جديد) ربما.
دلائل البيانات ¶
وبما أن شواهد القبور والبيانات يمكن أن تعيش في خراطيم مختلفة، فمن المهم أن ندرك أن فقد خسر قد يؤدي إلى أن تصبح البيانات حية مرة أخرى - الطريقة الأكثر شيوعا لفقدان الأختام هي أن يكون القرص الصلب ينهار. لتجنب جعل البيانات يعيش شواهد القبور والبيانات الفعلية هي دائما في نفس الدليل البيانات. بهذه الطريقة، إذا تم فقدان قرص، يتم فقدان كافة إصدارات قسم ولا يمكن إلغاء حذف البيانات. ولتحقيق ذلك يتم تشغيل مثيل إستراتيجية الضغط لكل دليل بيانات بالإضافة إلى مثيلات إستراتيجية الضغط التي تحتوي على بيانات تم إصلاحها / غير معالجتها، وهذا يعني أنه إذا كان لديك 4 دلائل بيانات سيكون هناك 8 حالات إستراتيجية للضغط. هذا له فوائد قليلة أكثر من مجرد تجنب حذف البيانات:
فمن الممكن لتشغيل المزيد من المعاملات في موازاة - سوف ضغط مستوية لديها عدة مستويات منفصلة تماما، ويمكن لكل واحد تشغيل المعاملات بشكل مستقل عن الآخرين. يمكن للمستخدمين النسخ الاحتياطي واستعادة دليل بيانات واحد. ملاحظة على الرغم من أن حاليا جميع أدلة البيانات تعتبر متساوية، لذلك إذا كان لديك قرص صغير وقرص كبير دعم دليلين البيانات، واحدة كبيرة سوف تكون محدودة من قبل واحد صغير. عمل واحد حول هذا هو خلق المزيد من الدلائل البيانات بدعم من القرص الكبير.
ضربة قبرية واحدة مستقرة
عندما يتم كتابة ستابل رسم بياني مع أوقات انتهاء القبر يتم إنشاء وهذا يستخدم في محاولة للعثور على ستابلز مع العديد من شواهد القبور وتشغيل واحد ستابل الضغط على أن ستابل في أمل أن تكون قادرة على إسقاط شواهد القبور في أن ستابل. قبل البدء في ذلك يتم التحقق أيضا مدى احتمال أن أي القبور سوف تكون في الواقع قادرة على إسقاط كم هذا ستابل تتداخل مع ستابلز أخرى. لتجنب معظم عمليات التحقق هذه يمكن تمكين خيار الضغط unecked_tombstone_compaction.
الخيارات الشائعة ¶
هناك عدد من الخيارات المشتركة لجميع استراتيجيات الضغط.
تمكين (افتراضي: ترو) ما إذا كان يجب تشغيل عمليات تشغيل ثانوية. لاحظ أنه يمكن تمكين & # 8216؛ & # 8217 ؛: ترو كخيار ضغط ثم قم بإجراء & # 8216؛ نوديتول إنفيلوتوتوكومباكتيون & # 8217؛ لبدء تشغيل المعاملات. tombstone_threshold (الافتراضي: 0.2) كم من ستابل ينبغي أن تكون شواهد القبور بالنسبة لنا للنظر في القيام ضغط ستابل واحد من أن ستابل. tombstone_compaction_interval (الافتراضي: 86400s (يوم واحد)) نظرا لأنه قد لا يكون من الممكن إسقاط أي شواهد القبور عند إجراء ضغط ستابل واحد نحن بحاجة للتأكد من أن واحد ستابل لا يحصل باستمرار ريكومباكتد - هذا الخيار يحدد كم مرة يجب أن نحاول ل نظرا ستابل. log_all (الافتراضي: فالس) تسجيل مفصل مفصل جديد، انظر أدناه. unchecked_tombstone_compaction (ديفولت: فالس) يحتوي ضغط ستبل المفرد على فحوصات صارمة تماما لتحديد ما إذا كان يجب بدء تشغيله، فسيؤدي هذا الخيار إلى تعطيل هذه الشيكات وبعض عمليات الاستخدام التي قد تكون مطلوبة. لاحظ أن هذا لا يغير أي شيء للضغط الفعلي، يتم إسقاط شواهد القبور فقط إذا كان آمنا للقيام بذلك - قد مجرد إعادة كتابة ستابل دون أن تكون قادرة على إسقاط أي شواهد القبور. only_purge_repaired_tombstone (افتراضي: فالس) الخيار لتمكين السلامة الإضافية للتأكد من أن يتم إسقاط شواهد القبور فقط إذا تم إصلاح البيانات. min_threshold (الافتراضي: 4) الحد الأدنى لعدد ستابلز قبل بدء الضغط. لم يتم استخدامه ل ليفليدكومباكتيونستراتيغي. max_threshold (الافتراضي: 32) يتم تشغيل الحد الأعلى لعدد ستابلز قبل الضغط. لم يتم استخدامه ل ليفليدكومباكتيونستراتيغي.
وعلاوة على ذلك، انظر القسم الخاص بكل استراتيجية لخيارات إضافية محددة.
ضغط نوديتول الأوامرВ¶
توفر الأداة المساعدة نوديتول عددا من الأوامر المتعلقة بالضغط:
enableautocompaction Enable compaction. disableautocompaction Disable compaction. setcompactionthroughput How fast compaction should run at most - defaults to 16MB/s, but note that it is likely not possible to reach this throughput. compactionstats Statistics about current and pending compactions. compactionhistory List details about the last compactions. setcompactionthreshold Set the min/max sstable count for when to trigger compaction, defaults to 4/32.
Switching the compaction strategy and options using JMXВ¶
It is possible to switch compaction strategies and its options on just a single node using JMX, this is a great way to experiment with settings without affecting the whole cluster. The mbean is:
and the attribute to change is CompactionParameters or CompactionParametersJson if you use jconsole or jmc. The syntax for the json version is the same as you would use in an ALTER TABLE statement - for example:
The setting is kept until someone executes an ALTER TABLE that touches the compaction settings or restarts the node.
More detailed compaction loggingВ¶
Enable with the compaction option log_all and a more detailed compaction log file will be produced in your log directory.
Size Tiered Compaction StrategyВ¶
The basic idea of SizeTieredCompactionStrategy (STCS) is to merge sstables of approximately the same size. All sstables are put in different buckets depending on their size. An sstable is added to the bucket if size of the sstable is within bucket_low and bucket_high of the current average size of the sstables already in the bucket. This will create several buckets and the most interesting of those buckets will be compacted. The most interesting one is decided by figuring out which bucket’s sstables takes the most reads.
Major compactionВ¶
When running a major compaction with STCS you will end up with two sstables per data directory (one for repaired data and one for unrepaired data). There is also an option (-s) to do a major compaction that splits the output into several sstables. The sizes of the sstables are approximately 50%, 25%, 12.5%. of the total size.
STCS optionsВ¶
DefragmentationВ¶
Defragmentation is done when many sstables are touched during a read. The result of the read is put in to the memtable so that the next read will not have to touch as many sstables. This can cause writes on a read-only-cluster.
Leveled Compaction StrategyВ¶
The idea of LeveledCompactionStrategy (LCS) is that all sstables are put into different levels where we guarantee that no overlapping sstables are in the same level. By overlapping we mean that the first/last token of a single sstable are never overlapping with other sstables. This means that for a SELECT we will only have to look for the partition key in a single sstable per level. Each level is 10x the size of the previous one and each sstable is 160MB by default. L0 is where sstables are streamed/flushed - no overlap guarantees are given here.
When picking compaction candidates we have to make sure that the compaction does not create overlap in the target level. This is done by always including all overlapping sstables in the next level. For example if we select an sstable in L3, we need to guarantee that we pick all overlapping sstables in L4 and make sure that no currently ongoing compactions will create overlap if we start that compaction. We can start many parallel compactions in a level if we guarantee that we wont create overlap. For L0 -> L1 compactions we almost always need to include all L1 sstables since most L0 sstables cover the full range. We also can’t compact all L0 sstables with all L1 sstables in a single compaction since that can use too much memory.
When deciding which level to compact LCS checks the higher levels first (with LCS, a “higher” level is one with a higher number, L0 being the lowest one) and if the level is behind a compaction will be started in that level.
Major compactionВ¶
It is possible to do a major compaction with LCS - it will currently start by filling out L1 and then once L1 is full, it continues with L2 etc. This is sub optimal and will change to create all the sstables in a high level instead, CASSANDRA-11817.
BootstrappingВ¶
During bootstrap sstables are streamed from other nodes. The level of the remote sstable is kept to avoid many compactions after the bootstrap is done. During bootstrap the new node also takes writes while it is streaming the data from a remote node - these writes are flushed to L0 like all other writes and to avoid those sstables blocking the remote sstables from going to the correct level, we only do STCS in L0 until the bootstrap is done.
STCS in L0В¶
If LCS gets very many L0 sstables reads are going to hit all (or most) of the L0 sstables since they are likely to be overlapping. To more quickly remedy this LCS does STCS compactions in L0 if there are more than 32 sstables there. This should improve read performance more quickly compared to letting LCS do its L0 -> L1 compactions. If you keep getting too many sstables in L0 it is likely that LCS is not the best fit for your workload and STCS could work out better.
Starved sstablesВ¶
If a node ends up with a leveling where there are a few very high level sstables that are not getting compacted they might make it impossible for lower levels to drop tombstones etc. For example, if there are sstables in L6 but there is only enough data to actually get a L4 on the node the left over sstables in L6 will get starved and not compacted. This can happen if a user changes sstable_size_in_mb from 5MB to 160MB for example. To avoid this LCS tries to include those starved high level sstables in other compactions if there has been 25 compaction rounds where the highest level has not been involved.
LCS optionsВ¶
LCS also support the cassandra. disable_stcs_in_l0 startup option ( - Dcassandra. disable_stcs_in_l0=true ) to avoid doing STCS in L0.
Time Window CompactionStrategyВ¶
TimeWindowCompactionStrategy (TWCS) is designed specifically for workloads where it’s beneficial to have data on disk grouped by the timestamp of the data, a common goal when the workload is time-series in nature or when all data is written with a TTL. In an expiring/TTL workload, the contents of an entire SSTable likely expire at approximately the same time, allowing them to be dropped completely, and space reclaimed much more reliably than when using SizeTieredCompactionStrategy or LeveledCompactionStrategy . The basic concept is that TimeWindowCompactionStrategy will create 1 sstable per file for a given window, where a window is simply calculated as the combination of two primary options:
compaction_window_unit (default: DAYS) A Java TimeUnit (MINUTES, HOURS, or DAYS). compaction_window_size (default: 1) The number of units that make up a window.
Taken together, the operator can specify windows of virtually any size, and TimeWindowCompactionStrategy will work to create a single sstable for writes within that window. For efficiency during writing, the newest window will be compacted using SizeTieredCompactionStrategy .
Ideally, operators should select a compaction_window_unit and compaction_window_size pair that produces approximately 20-30 windows - if writing with a 90 day TTL, for example, a 3 Day window would be a reasonable choice ( 'compaction_window_unit':'DAYS','compaction_window_size':3 ).
TimeWindowCompactionStrategy Operational ConcernsВ¶
The primary motivation for TWCS is to separate data on disk by timestamp and to allow fully expired SSTables to drop more efficiently. One potential way this optimal behavior can be subverted is if data is written to SSTables out of order, with new data and old data in the same SSTable. Out of order data can appear in two ways:
If the user mixes old data and new data in the traditional write path, the data will be comingled in the memtables and flushed into the same SSTable, where it will remain comingled. If the user’s read requests for old data cause read repairs that pull old data into the current memtable, that data will be comingled and flushed into the same SSTable.
While TWCS tries to minimize the impact of comingled data, users should attempt to avoid this behavior. Specifically, users should avoid queries that explicitly set the timestamp via CQL USING TIMESTAMP . Additionally, users should run frequent repairs (which streams data in such a way that it does not become comingled), and disable background read repair by setting the table’s read_repair_chance and dclocal_read_repair_chance to 0.
Changing TimeWindowCompactionStrategy OptionsВ¶
Operators wishing to enable TimeWindowCompactionStrategy on existing data should consider running a major compaction first, placing all existing data into a single (old) window. Subsequent newer writes will then create typical SSTables as expected.
Operators wishing to change compaction_window_unit or compaction_window_size can do so, but may trigger additional compactions as adjacent windows are joined together. If the window size is decrease d (for example, from 24 hours to 12 hours), then the existing SSTables will not be modified - TWCS can not split existing SSTables into multiple windows.
&نسخ؛ 2016 The Apache Software Foundation. Apache, the Apache feather logo, and Apache Cassandra are trademarks of The Apache Software Foundation.
سحب الطلبات 1.
حذف الضغط هو وسيلة لتحقيق الحذف في أباتشي كاساندرا دون اللجوء إلى شواهد القبور أو تلس. وهو يعمل من خلال وضع قواعد لما يجب حذف البيانات، ثم أثناء الضغط القياسية أو المعرفة من قبل المستخدم، ومنع السجلات التي تفشل الإدانة من دخول ستابل المدمجة حديثا. يتم تنظيف الفهارس الثانوية في وقت حدوث الحذف.
خيارات ضغط قاعدة دسس:
dcs_convictor - السلسلة المطلوبة - ما يسجله المدانون أثناء الضغط. يجب أن يكون اسم فئة صالحا يمتد أبستراكتسيمبليديليتينغكونفيكتور dcs_underlying_compactor - سلسلة المطلوبة - استراتيجية الضغط الأساسية لاستخدامها لاختيار ستست dcs_is_dry_run - اختياري بولان - إذا كان صحيحا، لا يتم تنفيذ عمليات حذف بدلا من ذلك يتم تسجيل إحصائيات حول ما كان سيتم حذفها إلى سجلات كاساندرا dcs_status_report_ms - سيتم تقديم تقرير حالة عن التقدم المحرز في حذف الضغط في هذه الفاصل الزمني dcs_backup_dir - سلسلة اختيارية - في حالة تقديمها، سيتم كتابة السجلات المحذوفة أثناء الضغط إلى ملفات ستابل في هذا الدليل.
يتم تمرير جميع الخيارات الأخرى أولا إلى الدرجة كونفيكتور، ثم إلى استراتيجية الضغط الأساسية.
يمكن أن يكون للمتهمين دسس خياراتهم الخاصة. فمثلا:
delete_keys - سلسلة مطلوبة - قاموس سلسلة جسون يوفر قواعد الحذف في شكل، حيث يتم تعريف النطاقات إما بالقيمة المفردة أو صفيف ذات قيمة اثنين من الحدود العلوية والسفلية لتتناسب مع هذا العمود، حيث تشير قيمة فارغة إلى غير محدود حافة النطاق.
rule_select_statement - سلسلة مطلوبة - ككل سيليكت بيان لاسترداد قواعد وقت متأخر تل. يجب أن يعرض البيان الأعمدة التالية: عمود (نص) اسم النطاق (أي) (tuple2 & لوت؛ سترينغ، سترينغ & غ؛) تل (بيجينت)
بالنسبة إلى اسم معين، يجب أن تكون كافة الأعمدة في تلك القاعدة إما أقسام أو مجموعات نظام المجموعة، ومن أجل تطبيق القاعدة على الصف، يجب أن يتطابق كل عمود في القاعدة مع نطاق واحد على الأقل. إذا تطابقت قواعد متعددة مع صف، فسيتم تطبيق القاعدة التي تحتوي على أقل تل. يعني تل من 0 حذف على الفور، تل & لوت؛ 0 يعني عدم الحذف. تتم مقارنة ذرات وريتيتيم ضد تل فعالة، وإذا كانت الذرة أقدم من تل، الذرة لا البقاء على قيد الحياة الضغط.
بالنسبة للجدول الذي يتضمن حقل اسمه "المستأجر" في المفتاح الأساسي (إما القسم أو الكتلة)، يمكننا تطبيق وقت ضغط تل مثل هذا. لاحظ الأسطر الأخيرة حيث أننا التفاف سيزتيريدكومباكتيونستراتيغي - هذا يجب أن تعمل بنفس الطريقة مع أي استراتيجية الضغط الأخرى.
مع قواعد الحذف المصاحبة التي تبدو كما يلي:
لإنتاج جرة التي يمكن تحميلها في الكتلة كاساندرا الخاص بك:
هذا سيضع جرة في حذف-كومباكتيون-ستراتيغي / تارجيت / سكالا-2.10 / ديليتينغ-كومباكتيون-ستراتيغي-0.24-SNAPSHOT. jar. على الرغم من أن المسار الهدف يذكر سكالا، لا توجد تبعيات سكالا في هذا جرة، وفي الواقع لا توجد تبعيات التي ليست بالفعل جزءا من الأساسية كاساندرا.
&نسخ؛ 2017 جيثب، Inc. شروط الخصوصية تعليمات حالة الأمان.
لا يمكنك تنفيذ هذا الإجراء في الوقت الحالي.
لقد سجلت الدخول باستخدام علامة تبويب أو نافذة أخرى. أعد التحميل لتحديث الجلسة. لقد سجلت الخروج في علامة تبويب أو نافذة أخرى. أعد التحميل لتحديث الجلسة.
CompactionВ¶
أنواع الضغط¶¶
يتم استخدام مفهوم الضغط لأنواع مختلفة من العمليات في كاساندرا، والشيء المشترك حول هذه العمليات هو أنه يأخذ واحد أو أكثر ستابلز وإخراج ستابلز جديدة. أنواع التفاعلات هي؛
تم تشغيل ضغط طفيفة تلقائيا في كاساندرا. ضغط كبير مستخدم ينفذ ضغط على جميع ستابلز على العقدة. تعريف المستخدم الضغط يقوم المستخدم بتشغيل الضغط على مجموعة معينة من ستابلز. فرك محاولة لإصلاح أي اسطوانات مكسورة. هذا يمكن فعلا إزالة البيانات صالحة إذا كانت البيانات تالفة، إذا حدث ذلك سوف تحتاج إلى تشغيل إصلاح كامل على العقدة. ترقية أوبغرادستابلز ستابلز إلى أحدث إصدار. تشغيل هذا بعد الترقية إلى إصدار رئيسي جديد. تنظيف إزالة أي نطاقات هذه العقدة لا تملك بعد الآن، وعادة ما أثار على العقد المجاورة بعد عقدة تم بوتسترابد منذ تلك العقدة سوف تأخذ ملكية بعض النطاقات من تلك العقد. مؤشر ثانوي إعادة بناء إعادة الفهارس الثانوية على العقدة. أنتيكومباكتيون بعد إصلاح النطاقات التي تم إصلاحها فعلا يتم تقسيمها من ستابلز التي كانت موجودة عند بدء الإصلاح. ضغط النطاق الفرعي من الممكن فقط ضغط نطاق فرعي معين - قد يكون هذا مفيدا إذا كنت تعرف رمز مميز قد تم التصرف به بشكل خاطئ - إما تجميع العديد من التحديثات أو العديد من عمليات الحذف. (نوديتول كومباكت - st x - et y) ستختار كل ستستابلز التي تحتوي على المدى بين x و y وتصدر ضغطا لتلك الناقلات. ل ستكس هذا على الأرجح تشمل جميع ستابلز ولكن مع لس يمكن أن يصدر الضغط لمجموعة فرعية من ستابلز. مع لس سيستابل الناتجة ستنتهي في L0.
متى يتم تشغيل ضغط طفيف؟ В¶
# عندما يتم إضافة ستابل إلى العقدة من خلال بيغ / تدفق الخ # عندما يتم تمكين أوتوكومباكتيون بعد تعطيل (نوديتول إنفيلوتوتوكومباكتيون) # عندما يضيف الضغط ستابلز جديدة. # التحقق من وجود طفيفة جديدة كل 5 دقائق.
دمج ستابلز¶¶
الضغط هو حول دمج ستابلز، حيث يتم فرز الأقسام في ستابلز استنادا إلى التجزئة من مفتاح القسم من الممكن دمج ستابلز منفصلة بشكل فعال. يتم فرز محتوى كل قسم أيضا بحيث يمكن دمج كل قسم بكفاءة.
مجموعة القبور وجمع القمامة (غ) غريسك¶
لماذا تومبستونيسВ T
عند تلقي طلب حذف من قبل كاساندرا فإنه لا إزالة البيانات من المتجر الأساسي فعلا. بدلا من ذلك يكتب قطعة خاصة من البيانات المعروفة باسم قبر. ويمثل المقبرة الحذف ويسبب كل القيم التي حدثت قبل أن يظهر القبر في الاستعلامات إلى قاعدة البيانات. ويستخدم هذا النهج بدلا من إزالة القيم بسبب طبيعة توزيع كاساندرا.
الحذف بدون علامات القبور ¶
تخيل مجموعة عقدة ثلاثة لها قيمة [A] متماثلة إلى كل عقدة:
إذا فشل أحد العقد و عملية الحذف لدينا فقط إزالة القيم الموجودة يمكننا في نهاية المطاف مع الكتلة التي تبدو مثل:
ثم عملية إصلاح ستحل محل قيمة [A] مرة أخرى على العقدتين التي تفتقد القيمة:
ومن شأن ذلك أن يؤدي إلى إحياء بياناتنا حتى لو تم حذفها.
الحذف مع تومبستونيسВ T
تبدأ مرة أخرى مع ثلاثة عقدة العنقودية التي لها قيمة [A] نسخ متماثل إلى كل عقدة:
إذا بدلا من إزالة البيانات نضيف سجل علامة، فإن لدينا حالة واحدة عقدة الفشل تبدو مثل هذا:
الآن عندما نصدر إصلاح سيتم نسخ القبر إلى النسخة المتماثلة، بدلا من البيانات المحذوفة يجري إحياء:
سوف عملية إصلاح لدينا وضع بشكل صحيح حالة النظام إلى ما نتوقع مع سجل [A] ملحوظ كما حذف على جميع العقد. وهذا يعني أننا سوف ينتهي بنا تراكم القبور التي سوف تتراكم بشكل دائم مساحة القرص. لتجنب إبقاء شواهد القبور إلى الأبد لدينا معلمة تعرف باسم gc_grace_seconds لكل جدول في كاساندرا.
المعلمة gc_grace_seconds و تومبستون ريموفال¶¶
تتحكم المعلمة gc_grace_seconds على مستوى الجدول كم من الوقت ستحافظ كاساندرا على شواهد القبور من خلال أحداث الضغط قبل إزالتها نهائيا. يجب أن تعكس هذه المدة بشكل مباشر مقدار الوقت الذي يتوقع المستخدم السماح به قبل استرداد عقدة فاشلة. بعد انتهاء فترة gc_grace_seconds يمكن إزالة الشاهد (بمعنى أنه لن يكون هناك أي سجل يتم حذف جزء معين من البيانات)، ولكن كقبر يمكن أن يعيش في ستابل واحد والبيانات التي يغطيها في آخر، يجب أن تشمل أيضا الضغط على حد سواء ستابل لشاهد لإزالتها. على وجه التحديد، لتكون قادرة على إسقاط قبر الفعلي ما يلي يجب أن يكون صحيحا؛
يجب أن يكون القبر أقدم من gc_grace_seconds إذا كان القسم X يحتوي على القبر، يجب تضمين ستابل التي تحتوي على القسم بالإضافة إلى جميع ستابلز تحتوي على بيانات أقدم من القبر تحتوي على X في نفس الضغط. نحن لا نحتاج لرعاية إذا كان القسم في ستابل إذا كنا نستطيع أن نضمن أن جميع البيانات في هذا ستابل هو أحدث من القبر. إذا كان القبر أقدم من البيانات فإنه لا يمكن الظل أن البيانات. إذا تم تمكين الخيار only_purge_repaired_tombstones، تتم إزالة شواهد القبور فقط إذا تم إصلاح البيانات أيضا.
إذا ظلت العقدة أسفل أو قطع الاتصال لفترة أطول من gc_grace_seconds سيتم إصلاح البيانات المحذوفة مرة أخرى إلى العقد الأخرى وإعادة الظهور في الكتلة. هذا هو في الأساس نفسه كما في & # 8220؛ يحذف دون شواهد القبر & # 8221؛ الجزء. لاحظ أنه لن يتم إزالة شواهد القبور حتى حدث ضغط حتى إذا انقضى gc_grace_seconds.
القيمة الافتراضية ل gc_grace_seconds هي 864000 أي ما يعادل 10 أيام. يمكن تعيين هذا عند إنشاء جدول أو تغييره باستخدام gc_grace_seconds.
البيانات في كاساندرا يمكن أن يكون خاصية إضافية تسمى الوقت للعيش - وهذا يستخدم لإسقاط البيانات التي انتهت صلاحيتها تلقائيا بمجرد الوصول إلى الوقت. وبمجرد انتهاء مدة البقاء (تل)، يتم تحويل البيانات إلى علامة ضبابية والتي تبقى حول gc_grace_seconds على الأقل. لاحظ أنه إذا قمت بجمع البيانات مع تل والبيانات دون تل (أو طول مختلف فقط من تل) كاساندرا سيكون وقتا عصيبا إسقاط شواهد القبور التي أنشئت منذ القسم قد تمتد العديد من ستابلز وليس كلها يتم ضغط في وقت واحد.
ستابلز بالكامل
إذا كان ستابل يحتوي فقط على شواهد القبور ويضمن أن ستابل ليس الظل البيانات في أي ضغط ستابل أخرى يمكن إسقاط أن ستابل. إذا كنت ترى ستابلز مع فقط شواهد القبور (لاحظ أن تل: إد البيانات تعتبر شواهد القبور مرة واحدة في الوقت للعيش قد انتهت) ولكن لا يتم إسقاطها عن طريق الضغط، فمن المرجح أن ستستابلز أخرى تحتوي على البيانات القديمة. هناك أداة تسمى ستابيكسيردبلوكيرز التي سوف قائمة التي ستابلز هي سروبلابل والتي تمنعهم من إسقاط. هذا مفيد بشكل خاص للضغط سلسلة الوقت مع تيمويندوكومباكتيونستراتيغي (و ديتتيريدكومباكتيونستراتيغي إيقاف).
البيانات التي تم إصلاحها / غير المعالجة
مع الإصلاحات الإضافية كاساندرا يجب أن تتبع ما هي البيانات التي تم إصلاحها وما هي البيانات التي لم يتم إصلاحها. مع أنتيكومباكتيون إصلاح البيانات يتم تقسيمها إلى إصلاحها و ستريبليس أونريبايرد. لتجنب خلط البيانات مرة أخرى يتم تشغيل مثيلات استراتيجية الضغط منفصلة على مجموعتين من البيانات، كل حالة فقط معرفة سوى إصلاحات أو ستريبليس غير إصلاحها. وهذا يعني أنه إذا قمت بتشغيل إصلاح متزايد مرة واحدة ثم مرة أخرى أبدا، قد يكون لديك بيانات قديمة جدا في ستابلز إصلاحها التي تمنع الضغط من إسقاط شواهد القبور في ستريبليس (غير جديد) ربما.
دلائل البيانات ¶
وبما أن شواهد القبور والبيانات يمكن أن تعيش في خراطيم مختلفة، فمن المهم أن ندرك أن فقد خسر قد يؤدي إلى أن تصبح البيانات حية مرة أخرى - الطريقة الأكثر شيوعا لفقدان الأختام هي أن يكون القرص الصلب ينهار. لتجنب جعل البيانات يعيش شواهد القبور والبيانات الفعلية هي دائما في نفس الدليل البيانات. بهذه الطريقة، إذا تم فقدان قرص، يتم فقدان كافة إصدارات قسم ولا يمكن إلغاء حذف البيانات. ولتحقيق ذلك يتم تشغيل مثيل إستراتيجية الضغط لكل دليل بيانات بالإضافة إلى مثيلات إستراتيجية الضغط التي تحتوي على بيانات تم إصلاحها / غير معالجتها، وهذا يعني أنه إذا كان لديك 4 دلائل بيانات سيكون هناك 8 حالات إستراتيجية للضغط. هذا له فوائد قليلة أكثر من مجرد تجنب حذف البيانات:
فمن الممكن لتشغيل المزيد من المعاملات في موازاة - سوف ضغط مستوية لديها عدة مستويات منفصلة تماما، ويمكن لكل واحد تشغيل المعاملات بشكل مستقل عن الآخرين. يمكن للمستخدمين النسخ الاحتياطي واستعادة دليل بيانات واحد. ملاحظة على الرغم من أن حاليا جميع أدلة البيانات تعتبر متساوية، لذلك إذا كان لديك قرص صغير وقرص كبير دعم دليلين البيانات، واحدة كبيرة سوف تكون محدودة من قبل واحد صغير. عمل واحد حول هذا هو خلق المزيد من الدلائل البيانات بدعم من القرص الكبير.
ضربة قبرية واحدة مستقرة
عندما يتم كتابة ستابل رسم بياني مع أوقات انتهاء القبر يتم إنشاء وهذا يستخدم في محاولة للعثور على ستابلز مع العديد من شواهد القبور وتشغيل واحد ستابل الضغط على أن ستابل في أمل أن تكون قادرة على إسقاط شواهد القبور في أن ستابل. قبل البدء في ذلك يتم التحقق أيضا مدى احتمال أن أي القبور سوف تكون في الواقع قادرة على إسقاط كم هذا ستابل تتداخل مع ستابلز أخرى. لتجنب معظم عمليات التحقق هذه يمكن تمكين خيار الضغط unecked_tombstone_compaction.
الخيارات الشائعة ¶
هناك عدد من الخيارات المشتركة لجميع استراتيجيات الضغط.
تمكين (افتراضي: ترو) ما إذا كان يجب تشغيل عمليات تشغيل ثانوية. لاحظ أنه يمكن تمكين & # 8216؛ & # 8217 ؛: ترو كخيار ضغط ثم قم بإجراء & # 8216؛ نوديتول إنفيلوتوتوكومباكتيون & # 8217؛ لبدء تشغيل المعاملات. tombstone_threshold (الافتراضي: 0.2) كم من ستابل ينبغي أن تكون شواهد القبور بالنسبة لنا للنظر في القيام ضغط ستابل واحد من أن ستابل. tombstone_compaction_interval (الافتراضي: 86400s (يوم واحد)) نظرا لأنه قد لا يكون من الممكن إسقاط أي شواهد القبور عند إجراء ضغط ستابل واحد نحن بحاجة للتأكد من أن واحد ستابل لا يحصل باستمرار ريكومباكتد - هذا الخيار يحدد كم مرة يجب أن نحاول ل نظرا ستابل. log_all (الافتراضي: فالس) تسجيل مفصل مفصل جديد، انظر أدناه. unchecked_tombstone_compaction (ديفولت: فالس) يحتوي ضغط ستبل المفرد على فحوصات صارمة تماما لتحديد ما إذا كان يجب بدء تشغيله، فسيؤدي هذا الخيار إلى تعطيل هذه الشيكات وبعض عمليات الاستخدام التي قد تكون مطلوبة. لاحظ أن هذا لا يغير أي شيء للضغط الفعلي، يتم إسقاط شواهد القبور فقط إذا كان آمنا للقيام بذلك - قد مجرد إعادة كتابة ستابل دون أن تكون قادرة على إسقاط أي شواهد القبور. only_purge_repaired_tombstone (افتراضي: فالس) الخيار لتمكين السلامة الإضافية للتأكد من أن يتم إسقاط شواهد القبور فقط إذا تم إصلاح البيانات. min_threshold (الافتراضي: 4) الحد الأدنى لعدد ستابلز قبل بدء الضغط. لم يتم استخدامه ل ليفليدكومباكتيونستراتيغي. max_threshold (الافتراضي: 32) يتم تشغيل الحد الأعلى لعدد ستابلز قبل الضغط. لم يتم استخدامه ل ليفليدكومباكتيونستراتيغي.
وعلاوة على ذلك، انظر القسم الخاص بكل استراتيجية لخيارات إضافية محددة.
ضغط نوديتول الأوامرВ¶
توفر الأداة المساعدة نوديتول عددا من الأوامر المتعلقة بالضغط:
enableautocompaction Enable compaction. disableautocompaction Disable compaction. setcompactionthroughput How fast compaction should run at most - defaults to 16MB/s, but note that it is likely not possible to reach this throughput. compactionstats Statistics about current and pending compactions. compactionhistory List details about the last compactions. setcompactionthreshold Set the min/max sstable count for when to trigger compaction, defaults to 4/32.
Switching the compaction strategy and options using JMXВ¶
It is possible to switch compaction strategies and its options on just a single node using JMX, this is a great way to experiment with settings without affecting the whole cluster. The mbean is:
and the attribute to change is CompactionParameters or CompactionParametersJson if you use jconsole or jmc. The syntax for the json version is the same as you would use in an ALTER TABLE statement - for example:
The setting is kept until someone executes an ALTER TABLE that touches the compaction settings or restarts the node.
More detailed compaction loggingВ¶
Enable with the compaction option log_all and a more detailed compaction log file will be produced in your log directory.
Size Tiered Compaction StrategyВ¶
The basic idea of SizeTieredCompactionStrategy (STCS) is to merge sstables of approximately the same size. All sstables are put in different buckets depending on their size. An sstable is added to the bucket if size of the sstable is within bucket_low and bucket_high of the current average size of the sstables already in the bucket. This will create several buckets and the most interesting of those buckets will be compacted. The most interesting one is decided by figuring out which bucket’s sstables takes the most reads.
Major compactionВ¶
When running a major compaction with STCS you will end up with two sstables per data directory (one for repaired data and one for unrepaired data). There is also an option (-s) to do a major compaction that splits the output into several sstables. The sizes of the sstables are approximately 50%, 25%, 12.5%. of the total size.
STCS optionsВ¶
DefragmentationВ¶
Defragmentation is done when many sstables are touched during a read. The result of the read is put in to the memtable so that the next read will not have to touch as many sstables. This can cause writes on a read-only-cluster.
Leveled Compaction StrategyВ¶
The idea of LeveledCompactionStrategy (LCS) is that all sstables are put into different levels where we guarantee that no overlapping sstables are in the same level. By overlapping we mean that the first/last token of a single sstable are never overlapping with other sstables. This means that for a SELECT we will only have to look for the partition key in a single sstable per level. Each level is 10x the size of the previous one and each sstable is 160MB by default. L0 is where sstables are streamed/flushed - no overlap guarantees are given here.
When picking compaction candidates we have to make sure that the compaction does not create overlap in the target level. This is done by always including all overlapping sstables in the next level. For example if we select an sstable in L3, we need to guarantee that we pick all overlapping sstables in L4 and make sure that no currently ongoing compactions will create overlap if we start that compaction. We can start many parallel compactions in a level if we guarantee that we wont create overlap. For L0 -> L1 compactions we almost always need to include all L1 sstables since most L0 sstables cover the full range. We also can’t compact all L0 sstables with all L1 sstables in a single compaction since that can use too much memory.
When deciding which level to compact LCS checks the higher levels first (with LCS, a “higher” level is one with a higher number, L0 being the lowest one) and if the level is behind a compaction will be started in that level.
Major compactionВ¶
It is possible to do a major compaction with LCS - it will currently start by filling out L1 and then once L1 is full, it continues with L2 etc. This is sub optimal and will change to create all the sstables in a high level instead, CASSANDRA-11817.
BootstrappingВ¶
During bootstrap sstables are streamed from other nodes. The level of the remote sstable is kept to avoid many compactions after the bootstrap is done. During bootstrap the new node also takes writes while it is streaming the data from a remote node - these writes are flushed to L0 like all other writes and to avoid those sstables blocking the remote sstables from going to the correct level, we only do STCS in L0 until the bootstrap is done.
STCS in L0В¶
If LCS gets very many L0 sstables reads are going to hit all (or most) of the L0 sstables since they are likely to be overlapping. To more quickly remedy this LCS does STCS compactions in L0 if there are more than 32 sstables there. This should improve read performance more quickly compared to letting LCS do its L0 -> L1 compactions. If you keep getting too many sstables in L0 it is likely that LCS is not the best fit for your workload and STCS could work out better.
Starved sstablesВ¶
If a node ends up with a leveling where there are a few very high level sstables that are not getting compacted they might make it impossible for lower levels to drop tombstones etc. For example, if there are sstables in L6 but there is only enough data to actually get a L4 on the node the left over sstables in L6 will get starved and not compacted. This can happen if a user changes sstable_size_in_mb from 5MB to 160MB for example. To avoid this LCS tries to include those starved high level sstables in other compactions if there has been 25 compaction rounds where the highest level has not been involved.
LCS optionsВ¶
LCS also support the cassandra. disable_stcs_in_l0 startup option ( - Dcassandra. disable_stcs_in_l0=true ) to avoid doing STCS in L0.
Time Window CompactionStrategyВ¶
TimeWindowCompactionStrategy (TWCS) is designed specifically for workloads where it’s beneficial to have data on disk grouped by the timestamp of the data, a common goal when the workload is time-series in nature or when all data is written with a TTL. In an expiring/TTL workload, the contents of an entire SSTable likely expire at approximately the same time, allowing them to be dropped completely, and space reclaimed much more reliably than when using SizeTieredCompactionStrategy or LeveledCompactionStrategy . The basic concept is that TimeWindowCompactionStrategy will create 1 sstable per file for a given window, where a window is simply calculated as the combination of two primary options:
compaction_window_unit (default: DAYS) A Java TimeUnit (MINUTES, HOURS, or DAYS). compaction_window_size (default: 1) The number of units that make up a window.
Taken together, the operator can specify windows of virtually any size, and TimeWindowCompactionStrategy will work to create a single sstable for writes within that window. For efficiency during writing, the newest window will be compacted using SizeTieredCompactionStrategy .
Ideally, operators should select a compaction_window_unit and compaction_window_size pair that produces approximately 20-30 windows - if writing with a 90 day TTL, for example, a 3 Day window would be a reasonable choice ( 'compaction_window_unit':'DAYS','compaction_window_size':3 ).
TimeWindowCompactionStrategy Operational ConcernsВ¶
The primary motivation for TWCS is to separate data on disk by timestamp and to allow fully expired SSTables to drop more efficiently. One potential way this optimal behavior can be subverted is if data is written to SSTables out of order, with new data and old data in the same SSTable. Out of order data can appear in two ways:
If the user mixes old data and new data in the traditional write path, the data will be comingled in the memtables and flushed into the same SSTable, where it will remain comingled. If the user’s read requests for old data cause read repairs that pull old data into the current memtable, that data will be comingled and flushed into the same SSTable.
While TWCS tries to minimize the impact of comingled data, users should attempt to avoid this behavior. Specifically, users should avoid queries that explicitly set the timestamp via CQL USING TIMESTAMP . Additionally, users should run frequent repairs (which streams data in such a way that it does not become comingled), and disable background read repair by setting the table’s read_repair_chance and dclocal_read_repair_chance to 0.
Changing TimeWindowCompactionStrategy OptionsВ¶
Operators wishing to enable TimeWindowCompactionStrategy on existing data should consider running a major compaction first, placing all existing data into a single (old) window. Subsequent newer writes will then create typical SSTables as expected.
Operators wishing to change compaction_window_unit or compaction_window_size can do so, but may trigger additional compactions as adjacent windows are joined together. If the window size is decrease d (for example, from 24 hours to 12 hours), then the existing SSTables will not be modified - TWCS can not split existing SSTables into multiple windows.
&نسخ؛ 2016 The Apache Software Foundation. Apache, the Apache feather logo, and Apache Cassandra are trademarks of The Apache Software Foundation.
No comments:
Post a Comment