إصدار ClickHouse 1.1.54327، 2017-12-21
يتضمن هذا الإصدار إصلاحات لأخطاء في الإصدار السابق 1.1.54318:
- تم إصلاح خطأ مرتبط باحتمال حدوث حالة تسابق في النسخ المتماثل، ما قد يؤدي إلى فقدان البيانات. تؤثر هذه المشكلة في الإصدارين 1.1.54310 و1.1.54318. إذا كنت تستخدم أحد هذين الإصدارين مع جداول Replicated، فنوصي بشدة بالتحديث. تظهر هذه المشكلة في السجلات على هيئة رسائل تحذير مثل
Part ... from own log does not exist.وهذه المشكلة مهمة حتى إن لم تظهر لك هذه الرسائل في السجلات.
إصدار ClickHouse 1.1.54318، 2017-11-30
يتضمن هذا الإصدار إصلاحات لأخطاء في الإصدار السابق 1.1.54310:
- تم إصلاح حذف الصفوف بشكل غير صحيح أثناء عمليات الدمج في محرك SummingMergeTree
- تم إصلاح تسرّب للذاكرة في محركات MergeTree غير القائمة على النسخ المتماثل
- تم إصلاح تراجع الأداء عند تكرار عمليات الإدراج في محركات MergeTree
- تم إصلاح مشكلة كانت تتسبب في توقف قائمة انتظار النسخ المتماثل عن العمل
- تم إصلاح تدوير سجلات الخادم وأرشفتها
إصدار ClickHouse 1.1.54310، 2017-11-01
الميزات الجديدة:
- مفتاح تقسيم مخصص لعائلة محركات الجداول MergeTree.
- محرك الجداول Kafka.
- تمت إضافة دعم لتحميل نماذج CatBoost وتطبيقها على البيانات المخزّنة في ClickHouse.
- تمت إضافة دعم للمناطق الزمنية ذات الإزاحات غير الصحيحة بالنسبة إلى UTC.
- تمت إضافة دعم للعمليات الحسابية على الفواصل الزمنية.
- تم توسيع نطاق القيم لنوعي Date وDateTime حتى السنة 2105.
- تمت إضافة الاستعلام
CREATE MATERIALIZED VIEW x TO y(ويحدّد جدولًا موجودًا لتخزين بيانات العرض المادي). - تمت إضافة الاستعلام
ATTACH TABLEبدون وسائط. - تم فصل منطق معالجة أعمدة Nested التي تنتهي أسماؤها بـ -Map في جدول SummingMergeTree إلى الدالة التجميعية sumMap. ويمكنك الآن تحديد هذه الأعمدة صراحةً.
- تمت زيادة الحجم الأقصى لقاموس IP trie إلى 128M إدخال.
- تمت إضافة الدالة getSizeOfEnumType.
- تمت إضافة الدالة التجميعية sumWithOverflow.
- تمت إضافة دعم لتنسيق الإدخال Cap'n Proto.
- يمكنك الآن تخصيص مستوى الضغط عند استخدام خوارزمية zstd.
التغييرات غير المتوافقة مع الإصدارات السابقة:
- لا يُسمح بإنشاء جداول مؤقتة باستخدام محرك غير Memory.
- لا يُسمح بالإنشاء الصريح للجداول باستخدام محرك View أو MaterializedView.
- أثناء إنشاء الجدول، يتحقق فحص جديد من أن تعبير مفتاح أخذ العينات مُضمَّن في المفتاح الأساسي.
إصلاحات الأخطاء:
- تم إصلاح حالات التعليق عند الإدراج المتزامن في جدول Distributed.
- تم إصلاح الإضافة والإزالة غير الذرّيتين للأجزاء في جداول Replicated.
- لم تعد البيانات المُدرجة في عرض مادي تخضع لإزالة تكرار غير ضرورية.
- لم يعد تنفيذ استعلام على جدول Distributed تكون فيه النسخة المحلية متأخرة والنسخ البعيدة غير متاحة يؤدي إلى خطأ.
- لم يعد المستخدمون بحاجة إلى أذونات وصول إلى قاعدة البيانات
defaultلإنشاء جداول مؤقتة. - تم إصلاح التعطل عند تحديد النوع Array من دون وسائط.
- تم إصلاح حالات التعليق عند امتلاء القرص الذي يحتوي على سجلات الخادم.
- تم إصلاح تجاوز سعة في الدالة toRelativeWeekNum خلال الأسبوع الأول من حقبة Unix.
تحسينات البناء:
- جرى تحديث عدة مكتبات تابعة لجهات خارجية (ولا سيما Poco) وتحويلها إلى وحدات فرعية في Git.
إصدار ClickHouse 1.1.54304، 2017-10-19
الميزات الجديدة:
- دعم TLS في البروتوكول الأصلي (للتمكين، عيّن
tcp_ssl_portفيconfig.xml).
إصلاحات الأخطاء:
- يحاول
ALTERفي جداول Replicated الآن بدء التنفيذ في أقرب وقت ممكن. - تم إصلاح التعطل عند قراءة البيانات باستخدام الإعداد
preferred_block_size_bytes=0. - تم إصلاح أعطال
clickhouse-clientعند الضغط علىPage Down - تصحيح تفسير بعض الاستعلامات المعقدة التي تحتوي على
GLOBAL INوUNION ALL - يعمل
FREEZE PARTITIONالآن دائمًا على نحو ذري. - تُرجِع طلبات POST الفارغة الآن استجابة بالرمز 411.
- تم إصلاح أخطاء التفسير في تعبيرات مثل
CAST(1 AS Nullable(UInt8)). - تم إصلاح خطأ عند قراءة أعمدة
Array(Nullable(String))من جداولMergeTree. - تم إصلاح التعطل أثناء تحليل استعلامات مثل
SELECT dummy AS dummy, dummy AS b - يتم تحديث Users بشكل صحيح مع وجود
users.xmlغير صالح - التعامل الصحيح عندما يعيد القاموس التنفيذي رمز استجابة غير صفري.
إصدار ClickHouse 1.1.54292، 2017-09-20
الميزات الجديدة:
- أُضيفت الدالة
pointInPolygonللعمل مع الإحداثيات في المستوى الإحداثي. - أُضيفت دالة التجميع
sumMapلحساب مجموع المصفوفات، على نحو مماثل لـSummingMergeTree. - أُضيفت الدالة
trunc. كما حُسِّن أداء دوال التقريب (round,floor,ceil,roundToExp2) وصُحِّح منطق عملها. وتغيّر أيضًا منطق الدالةroundToExp2للكسور والأعداد السالبة. - أصبح الملف التنفيذي لـ ClickHouse الآن أقل اعتمادًا على إصدار libc. ويمكن للملف التنفيذي نفسه لـ ClickHouse أن يعمل على مجموعة واسعة من أنظمة Linux. ولا يزال هناك اعتماد عند استخدام الاستعلامات المترجمة (مع الإعداد
compile = 1، الذي لا يُستخدم افتراضيًا). - جرى تقليل الوقت اللازم للترجمة الديناميكية للاستعلامات.
إصلاحات الأخطاء:
- تم إصلاح خطأ كان يؤدي أحيانًا إلى ظهور رسائل
part ... intersects previous partوإضعاف اتساق النسخ المتماثلة. - تم إصلاح خطأ كان يتسبب في تجمّد الخادم إذا لم يكن ZooKeeper متاحًا أثناء إيقاف التشغيل.
- أُزيل التسجيل المفرط عند استعادة النسخ المتماثلة.
- تم إصلاح خطأ في تنفيذ UNION ALL.
- تم إصلاح خطأ في الدالة concat كان يحدث إذا كان العمود الأول في كتلة بيانات من النوع Array.
- يُعرَض Progress الآن بشكل صحيح في جدول system.merges.
إصدار ClickHouse 1.1.54289، 2017-09-13
الميزات الجديدة:
- استعلامات
SYSTEMلإدارة الخادم:SYSTEM RELOAD DICTIONARY,SYSTEM RELOAD DICTIONARIES,SYSTEM DROP DNS CACHE,SYSTEM SHUTDOWN,SYSTEM KILL. - أُضيفت دوال للعمل مع المصفوفات:
concat,arraySlice,arrayPushBack,arrayPushFront,arrayPopBack,arrayPopFront. - أُضيفت المعاملتان
rootوidentityإلى إعدادات ZooKeeper. يتيح لك ذلك عزل المستخدمين الأفراد ضمن نفس عنقود ZooKeeper. - أُضيفت الدوال التجميعية
groupBitAndوgroupBitOrوgroupBitXor(ولأغراض التوافق، فهي متاحة أيضًا بالأسماءBIT_ANDوBIT_ORوBIT_XOR). - يمكن تحميل القواميس الخارجية من MySQL عبر تحديد مقبس في نظام الملفات.
- يمكن تحميل القواميس الخارجية من MySQL عبر SSL (المعاملات
ssl_cert,ssl_key,ssl_ca). - أُضيف الإعداد
max_network_bandwidth_for_userلتقييد إجمالي استخدام النطاق الترددي للاستعلامات لكل مستخدم. - دعم
DROP TABLEللجداول المؤقتة. - دعم قراءة قيم
DateTimeبتنسيق Unix timestamp من التنسيقينCSVوJSONEachRow. - أصبحت النسخ المتماثلة المتأخرة في الاستعلامات الموزعة مستبعدة افتراضيًا (الحد الافتراضي هو 5 دقائق).
- يُستخدم قفل FIFO أثناء ALTER: لا يُحجب استعلام ALTER إلى أجل غير مسمى بسبب الاستعلامات طويلة التشغيل.
- خيار لتعيين
umaskفي ملف الإعدادات. - تحسين الأداء للاستعلامات التي تحتوي على
DISTINCT.
إصلاحات الأخطاء:
- تم تحسين عملية حذف العُقد القديمة في ZooKeeper. في السابق، لم تكن هذه العُقد تُحذف أحيانًا عند وجود عمليات
insertمتكررة جدًا، مما كان يؤدي، من بين أمور أخرى، إلى بطء إيقاف الخادم. - تم إصلاح آلية الاختيار العشوائي عند تحديد المضيفات للاتصال بـ ZooKeeper.
- تم إصلاح استبعاد النسخ المتماثلة المتأخرة في الاستعلامات الموزعة إذا كانت النسخة المتماثلة هي localhost.
- تم إصلاح خطأ كان قد يؤدي إلى تلف جزء بيانات في جدول
ReplicatedMergeTreeبعد تنفيذALTER MODIFYعلى عنصر ضمن بنيةNested. - تم إصلاح خطأ كان قد يتسبب في "تعليق" استعلامات SELECT.
- تحسينات على استعلامات DDL الموزعة.
- تم إصلاح الاستعلام
CREATE TABLE ... AS <materialized view>. - تم حل حالة التوقف المتبادل في الاستعلام
ALTER ... CLEAR COLUMN IN PARTITIONلجداولBuffer. - تم إصلاح القيمة الافتراضية غير الصالحة لأنواع
Enum(0 بدلًا من الحد الأدنى) عند استخدام تنسيقاتJSONEachRowوTSKV. - تم حل مشكلة ظهور عمليات يتيمة عند استخدام dictionary بمصدر
executable. - تم إصلاح segfault في استعلام HEAD.
سير عمل مُحسَّن لتطوير ClickHouse وبنائه:
- يمكنك استخدام
pbuilderلبناء ClickHouse. - يمكنك استخدام
libc++بدلًا منlibstdc++في عمليات البناء على Linux. - أُضيفت تعليمات لاستخدام أدوات التحليل الساكن للشيفرة:
Coverageوclang-tidyوcppcheck.
يرجى ملاحظة ما يلي عند الترقية:
- توجد الآن قيمة افتراضية أعلى لإعداد MergeTree
max_bytes_to_merge_at_max_space_in_pool(الحد الأقصى للحجم الإجمالي، بالبايت، لأجزاء البيانات المطلوب دمجها): إذ ارتفعت من 100 GiB إلى 150 GiB. وقد يؤدي ذلك إلى تشغيل عمليات دمج كبيرة بعد ترقية الخادم، مما قد يتسبب في زيادة الحمل على منظومة الأقراص. وإذا كانت المساحة الحرة المتاحة على الخادم أقل من ضعفي الحجم الإجمالي لعمليات الدمج الجارية، فسيتسبب ذلك في توقف جميع عمليات الدمج الأخرى، بما في ذلك عمليات دمج أجزاء البيانات الصغيرة. ونتيجة لذلك، ستفشل استعلامات INSERT مع الرسالة "Merges are processing significantly slower than inserts." استخدم الاستعلامSELECT * FROM system.mergesلمراقبة الوضع. ويمكنك أيضًا التحقق من metric DiskSpaceReservedForMergeفي جدولsystem.metrics، أو في Graphite. ولا تحتاج إلى اتخاذ أي إجراء لإصلاح ذلك، لأن المشكلة ستحل نفسها بمجرد اكتمال عمليات الدمج الكبيرة. وإذا كان هذا غير مقبول بالنسبة إليك، فيمكنك استعادة القيمة السابقة للإعدادmax_bytes_to_merge_at_max_space_in_pool. للقيام بذلك، انتقل إلى القسم<merge_tree>في config.xml، واضبط<merge_tree>``<max_bytes_to_merge_at_max_space_in_pool>107374182400</max_bytes_to_merge_at_max_space_in_pool>ثم أعد تشغيل الخادم.
إصدار ClickHouse 1.1.54284، 2017-08-29
- هذا إصدار يتضمن إصلاحات للأخطاء للإصدار السابق 1.1.54282. ويعالج حالات تسرّب في دليل parts في ZooKeeper.
إصدار ClickHouse 1.1.54282، 2017-08-23
يتضمن هذا الإصدار إصلاحات للأخطاء في الإصدار السابق 1.1.54276:
- تم إصلاح
DB::Exception: Assertion violation: !_path.empty()عند الإدراج في جدول Distributed. - تم إصلاح التحليل عند الإدراج بتنسيق RowBinary إذا كانت بيانات الإدخال تبدأ بـ
';'. - تم إصلاح الأخطاء التي تحدث أثناء الترجمة في وقت التشغيل لبعض الدوال التجميعية (مثل
groupArray()).
إصدار ClickHouse 1.1.54276، 2017-08-16
الميزات الجديدة:
- تمت إضافة قسم WITH اختياري إلى استعلام SELECT. مثال على الاستعلام:
WITH 1+1 AS a SELECT a, a*a - يمكن تنفيذ INSERT بشكل متزامن في جدول Distributed: لا يتم إرجاع OK إلا بعد حفظ كل البيانات على جميع الشظايا. يتم تفعيل ذلك عبر الإعداد insert_distributed_sync=1.
- تمت إضافة نوع البيانات UUID للعمل مع معرّفات بطول 16 بايت.
- تمت إضافة أسماء بديلة لـ CHAR وFLOAT وأنواع أخرى للتوافق مع Tableau.
- تمت إضافة الدوال toYYYYMM وtoYYYYMMDD وtoYYYYMMDDhhmmss لتحويل الوقت إلى أرقام.
- يمكنك استخدام عناوين IP (إلى جانب اسم المضيف) لتحديد الخوادم في استعلامات DDL العنقودية.
- تمت إضافة دعم للمعاملات غير الثابتة والإزاحات السالبة في الدالة
substring(str, pos, len). - تمت إضافة المعلمة max_size إلى الدالة التجميعية
groupArray(max_size)(column)، مع تحسين أدائها أيضًا.
التغييرات الرئيسية:
- تحسينات أمنية: تُنشأ جميع ملفات الخادم بأذونات 0640 (يمكن تغييرها عبر معامل config
<umask>). - تحسين رسائل الخطأ للاستعلامات ذات الصياغة غير الصحيحة.
- تقليل استهلاك الذاكرة بشكل كبير وتحسين الأداء عند دمج أجزاء كبيرة من بيانات MergeTree.
- زيادة أداء عمليات دمج البيانات بشكل كبير لمحرك ReplacingMergeTree.
- تحسين أداء عمليات الإدراج غير المتزامنة من جدول Distributed عبر تجميع عدة عمليات إدراج من المصدر. لتمكين هذه الوظيفة، استخدم الإعداد distributed_directory_monitor_batch_inserts=1.
التغييرات غير المتوافقة مع الإصدارات السابقة:
- تم تغيير التنسيق الثنائي للحالات التجميعية لدوال
groupArray(array_column)عند استخدام المصفوفات.
القائمة الكاملة للتغييرات:
- تمت إضافة الإعداد
output_format_json_quote_denormals، الذي يتيح إخراج قيم nan و inf بتنسيق JSON. - جرى تحسين تخصيص التدفقات عند القراءة من جدول Distributed.
- يمكن تهيئة الإعدادات في وضع
readonlyإذا كانت القيمة لا تتغير. - تمت إضافة إمكانية جلب حبيبات غير صحيحة العدد في محرك MergeTree للالتزام بالقيود المفروضة على حجم الكتلة المحدد في الإعداد
preferred_block_size_bytes. والهدف من ذلك هو تقليل استهلاك الذاكرة وزيادة محلية التخزين المؤقت عند معالجة الاستعلامات من الجداول ذات الأعمدة الكبيرة. - استخدام فعّال للفهارس التي تحتوي على تعبيرات مثل
toStartOfHour(x)مع شروط مثلtoStartOfHour(x) op сonstexpr. - تمت إضافة إعدادات جديدة لمحركات MergeTree (قسم
merge_treeفيconfig.xml):- يحدد
replicated_deduplication_window_secondsعدد الثواني المسموح بها لإزالة التكرار من عمليات الإدراج في جداول Replicated. - يحدد
cleanup_delay_periodمدى تكرار بدء التنظيف لإزالة البيانات القديمة. - يمكن لـ
replicated_can_become_leaderمنع النسخة المتماثلة من أن تصبح القائد (وإسناد عمليات الدمج).
- يحدد
- جرى تسريع التنظيف لإزالة البيانات القديمة من ZooKeeper.
- أُدخلت عدة تحسينات وإصلاحات على استعلامات DDL المجمّعة. ومن أبرزها الإعداد الجديد
distributed_ddl_task_timeout، الذي يقيّد مدة انتظار الاستجابة من الخوادم في الـ cluster. وإذا لم يُنفَّذ طلب DDL على جميع المضيفين، فستتضمن الاستجابة خطأ timeout وسيُنفَّذ الطلب في وضع غير متزامن. - تم تحسين عرض تتبعات المكدس في سجلات الخادم.
- تمت إضافة القيمة "none" لطريقة الضغط.
- يمكنك استخدام عدة أقسام
dictionaries_configفيconfig.xml. - من الممكن الاتصال بـ MySQL عبر مقبس في نظام الملفات.
- يحتوي الجدول
system.partsعلى عمود جديد يتضمن معلومات عن حجم العلامات بالبايت.
إصلاحات الأخطاء:
- أصبحت الجداول الموزعة التي تستخدم جدول Merge تعمل بشكل صحيح الآن مع استعلام SELECT يتضمن شرطًا على الحقل
_table. - تم إصلاح حالة سباق نادرة في ReplicatedMergeTree عند التحقق من أجزاء البيانات.
- تم إصلاح احتمال حدوث تجمّد أثناء "leader election" عند بدء تشغيل الخادم.
- كان الإعداد max_replica_delay_for_distributed_queries يُتجاهل عند استخدام replica محلية من مصدر البيانات. وقد تم إصلاح ذلك.
- تم إصلاح السلوك غير الصحيح لـ
ALTER TABLE CLEAR COLUMN IN PARTITIONعند محاولة تنظيف عمود غير موجود. - تم إصلاح Exception في الدالة multiIf عند استخدام Arrays أو Strings فارغة.
- تم إصلاح الإفراط في تخصيصات الذاكرة عند إلغاء تسلسل Native format.
- تم إصلاح التحديث التلقائي غير الصحيح لقواميس Trie.
- تم إصلاح Exception عند تشغيل queries تتضمن clause من نوع GROUP BY من جدول Merge عند استخدام SAMPLE.
- تم إصلاح crash في GROUP BY عند استخدام distributed_aggregation_memory_efficient=1.
- يمكنك الآن تحديد database.table في الجانب الأيمن من IN و JOIN.
- كان يتم استخدام عدد كبير جدًا من threads في aggregation المتوازي. وقد تم إصلاح ذلك.
- تم إصلاح طريقة عمل الدالة "if" مع arguments من نوع FixedString.
- كان SELECT يعمل بشكل غير صحيح من جدول Distributed بالنسبة إلى shards ذات الوزن 0. وقد تم إصلاح ذلك.
- لم يعد تنفيذ
CREATE VIEW IF EXISTSيتسبب في حدوث أعطال. - تم إصلاح السلوك غير الصحيح عند ضبط input_format_skip_unknown_fields=1 مع وجود أعداد سالبة.
- تم إصلاح حلقة لا نهائية في الدالة
dictGetHierarchy()إذا كانت هناك بيانات غير صالحة في Dictionary. - تم إصلاح أخطاء
Syntax error: unexpected (...)عند تشغيل distributed queries التي تحتوي على subqueries ضمن clause من نوع IN أو JOIN ومع جداول Merge. - تم إصلاح التفسير غير الصحيح لاستعلام SELECT من جداول Dictionary.
- تم إصلاح الخطأ "Cannot mremap" عند استخدام Arrays في clauses من نوع IN و JOIN مع أكثر من ملياري عنصر.
- تم إصلاح failover للقواميس التي تستخدم MySQL بوصفه المصدر.
تحسين سير العمل لتطوير ClickHouse وبنائه:
- يمكن إنشاء الإصدارات البرمجية في Arcadia.
- يمكنك استخدام gcc 7 لتجميع ClickHouse.
- أصبحت عمليات البناء المتوازي باستخدام ccache+distcc أسرع.
إصدار ClickHouse 1.1.54245، 2017-07-04
الميزات الجديدة:
- أوامر DDL الموزعة (على سبيل المثال،
CREATE TABLE ON CLUSTER) - الاستعلام المكرّر
ALTER TABLE CLEAR COLUMN IN PARTITION. - محرك جداول Dictionary (الوصول إلى بيانات القاموس في صورة جدول).
- محرك قاعدة بيانات Dictionary (يتيح هذا النوع من قواعد البيانات تلقائيًا جداول Dictionary لجميع القواميس الخارجية المتصلة).
- يمكنك التحقق من تحديثات القاموس بإرسال طلب إلى المصدر.
- أسماء الأعمدة المؤهَّلة
- إحاطة المعرّفات بعلامات اقتباس مزدوجة.
- الجلسات ضمن واجهة HTTP.
- يمكن لاستعلام
OPTIMIZEالخاص بجدول Replicated أن يعمل ليس على القائد فقط.
التغييرات غير المتوافقة مع الإصدارات السابقة:
- تمت إزالة SET GLOBAL.
تغييرات طفيفة:
- الآن، بعد تفعيل التنبيه، يُطبع تتبّع المكدس الكامل في السجل.
- خُفِّف التحقق من عدد أجزاء البيانات التالفة/الزائدة عند بدء التشغيل (إذ كانت هناك إيجابيات كاذبة كثيرة جدًا).
إصلاحات الأخطاء:
- تم إصلاح مشكلة استمرار استخدام اتصال سيئ عند الإدراج في جدول Distributed.
- يعمل GLOBAL IN الآن مع استعلام من جدول Merge يطالع جدول Distributed.
- كان يتم اكتشاف عدد غير صحيح من الأنوية على جهاز افتراضي في Google Compute Engine. تم إصلاح ذلك.
- أُدخلت تغييرات على آلية عمل المصدر التنفيذي للقواميس الخارجية المخزنة مؤقتًا.
- تم إصلاح مقارنة السلاسل النصية التي تحتوي على محارف NULL.
- تم إصلاح مقارنة حقول المفتاح الأساسي من نوع Float32 مع الثوابت.
- سابقًا، كان التقدير غير الصحيح لحجم أحد الحقول قد يؤدي إلى عمليات تخصيص أكبر من اللازم.
- تم إصلاح تعطل عند الاستعلام عن عمود من نوع Nullable أُضيف إلى جدول باستخدام ALTER.
- تم إصلاح تعطل عند الفرز حسب عمود من نوع Nullable إذا كان عدد الصفوف أقل من LIMIT.
- تم إصلاح استعلام فرعي في ORDER BY يتكون فقط من قيم ثابتة.
- سابقًا، كان يمكن أن يبقى جدول Replicated في حالة غير صالحة بعد فشل DROP TABLE.
- لم تعد الأسماء المستعارة للاستعلامات الفرعية القياسية ذات النتائج الفارغة تُفقد.
- الآن، لا يفشل الاستعلام الذي يستخدم التحويل البرمجي مع حدوث خطأ إذا تعرض ملف .so للتلف.