إصدار 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 أن يعمل ليس على القائد فقط.
التغييرات غير المتوافقة مع الإصدارات السابقة:
- الآن، بعد تفعيل التنبيه، يُطبع تتبّع المكدس الكامل في السجل.
- خُفِّف التحقق من عدد أجزاء البيانات التالفة/الزائدة عند بدء التشغيل (إذ كانت هناك إيجابيات كاذبة كثيرة جدًا).
- تم إصلاح مشكلة استمرار استخدام اتصال سيئ عند الإدراج في جدول Distributed.
- يعمل GLOBAL IN الآن مع استعلام من جدول Merge يطالع جدول Distributed.
- كان يتم اكتشاف عدد غير صحيح من الأنوية على جهاز افتراضي في Google Compute Engine. تم إصلاح ذلك.
- أُدخلت تغييرات على آلية عمل المصدر التنفيذي للقواميس الخارجية المخزنة مؤقتًا.
- تم إصلاح مقارنة السلاسل النصية التي تحتوي على محارف NULL.
- تم إصلاح مقارنة حقول المفتاح الأساسي من نوع Float32 مع الثوابت.
- سابقًا، كان التقدير غير الصحيح لحجم أحد الحقول قد يؤدي إلى عمليات تخصيص أكبر من اللازم.
- تم إصلاح تعطل عند الاستعلام عن عمود من نوع Nullable أُضيف إلى جدول باستخدام ALTER.
- تم إصلاح تعطل عند الفرز حسب عمود من نوع Nullable إذا كان عدد الصفوف أقل من LIMIT.
- تم إصلاح استعلام فرعي في ORDER BY يتكون فقط من قيم ثابتة.
- سابقًا، كان يمكن أن يبقى جدول Replicated في حالة غير صالحة بعد فشل DROP TABLE.
- لم تعد الأسماء المستعارة للاستعلامات الفرعية القياسية ذات النتائج الفارغة تُفقد.
- الآن، لا يفشل الاستعلام الذي يستخدم التحويل البرمجي مع حدوث خطأ إذا تعرض ملف .so للتلف.
آخر تعديل في ٢٩ يونيو ٢٠٢٦